undefined symbol:clapack_sgesv

时间:2012-01-11 17:20:40

标签: numpy scipy python-2.6

我有这个小代码:

from numpy import *
from scipy import signal, misc
import matplotlib.pyplot as plt

path="~/pics/"
band_1 = misc.imread(path + "foo.tif");

H = array((1/2.0, 1/4.0, 1/2.0));
signal.convolve2d(band_1.flatten(), H)

plt.figure()
plt.imshow(band_1)
plt.show()

然后我执行此代码python foo.py并抛出此错误:

Traceback (most recent call last):
  File "foo.py", line 2, in <module>
    from scipy import signal
  File "/usr/lib/python2.6/site-packages/scipy/signal/__init__.py", line 10, in <module>
    from filter_design import *
  File "/usr/lib/python2.6/site-packages/scipy/signal/filter_design.py", line 12, in <module>
    from scipy import special, optimize
  File "/usr/lib/python2.6/site-packages/scipy/optimize/__init__.py", line 14, in <module>
    from nonlin import *
  File "/usr/lib/python2.6/site-packages/scipy/optimize/nonlin.py", line 113, in <module>
    from scipy.linalg import norm, solve, inv, qr, svd, lstsq, LinAlgError
  File "/usr/lib/python2.6/site-packages/scipy/linalg/__init__.py", line 9, in <module>
    from basic import *
  File "/usr/lib/python2.6/site-packages/scipy/linalg/basic.py", line 14, in <module>
    from lapack import get_lapack_funcs
  File "/usr/lib/python2.6/site-packages/scipy/linalg/lapack.py", line 15, in <module>
    from scipy.linalg import clapack
ImportError: /usr/lib/python2.6/site-packages/scipy/linalg/clapack.so: undefined symbol: clapack_sgesv

有什么问题?它似乎是from scipy import signal,但我不清楚。

我检查了其他来源和论坛,但还没有理由:

谢谢

3 个答案:

答案 0 :(得分:4)

在Debian上,您可以使用update-alternatives,假设您安装了更多参考实现。

来自debian wiki

update-alternatives --config liblapack.so.3
update-alternatives --config libblas.so.3

答案 1 :(得分:3)

我不能确定,因为您没有指定您正在使用的发行版,但我在Gentoo上遇到了同样的问题。

/ usr / lib和/ usr / lib64具有实际库的符号链接。默认情况下,它链接到libblas,libcblas和liblapack的引用实现 - 它不会为clapack_sgesv和许多其他例程导出符号。

要在Gentoo中解决此问题:

sudo emerge blas-atlas
eselect blas list
eselect cblas list
sudo eselect blas set X # Grab X from the result of
sudo eselect cblas set X # the 'list' lines above
sudo emerge lapack-atlas
eselect lapack list
sudo eselect lapack set X
sudo emerge --unmerge scipy numpy matplotlib
sudo emerge scipy numpy matplotlib (... whatever else ...)

答案 2 :(得分:1)

从Ubuntu 12.04升级到12.10之后我遇到了这个问题。问题是我在/usr/local/lib/python2.7/dist-packages中安装了两个版本的scipy。为了解决我所做的问题:

 sudo apt-get remove python-scipy
 sudo rm -fr /usr/local/lib/python2.7/dist-packages/scipy*
 sudo apt-get install python-scipy