运行Ubuntu 11.10 + python2.7 ...从源代码构建numpy并安装它,但是当我去安装它时,我得到了
ImportError: /usr/lib/liblapack.so.3gf: undefined symbol: ATL_chemv
当它尝试从numpy.linalg导入lapack_lite时。我试图从头开始重建lapack,但它似乎只是制作
/usr/local/lib/libblas.a
/usr/local/lib/liblapack.a
/usr/local/lib/libtmglib.a
和.so文件。 .so.3gf来自哪里,我该如何解决?
答案 0 :(得分:60)
我遇到了同样的问题,删除libopenblas-base软件包就可以了:
sudo apt-get remove libopenblas-base
正如其他人已经解释的那样,有几个软件包提供了liblapack.so.3gf的不兼容版本。
答案 1 :(得分:9)
根据我看到的一些bug报告,您可能安装了多个BLAS / ATLAS / LAPACK提供程序,如ATLAS和OpenBLAS / GotoBLAS,这些提供程序相互冲突。看看这个:
$ ls -l /etc/alternatives/*.so.3gf
并检查它们是否对应于同一个包(例如,它们都指向/usr/lib/atlas-base/
)
答案 2 :(得分:4)
如果您安装了 libopenblas-base 和 libatlas3-base ,但未安装 liblapack3 ,则会出现此问题。这些软件包组合安装了 libblas.so (来自OpenBLAS)和 liblapack.so (来自ATLAS)的冲突版本。
解决方案1(我最喜欢的):如果你还安装 liblapack3 ,你可以在你的机器上保留OpenBLAS和ATLAS。
sudo apt-get install liblapack3
解决方案2:卸载ATLAS(这实际上会为你自动安装 liblapack3 ,因为有一些deb软件包恶作剧)
sudo apt-get uninstall libatlas3-base
解决方案3:卸载OpenBLAS
sudo apt-get uninstall libopenblas-base
$ dpkg -l | grep 'openblas\|atlas\|lapack'
ii libatlas3-base 3.10.1-4 amd64 Automatically Tuned Linear Algebra Software, generic shared
ii libopenblas-base 0.2.8-6ubuntu1 amd64 Optimized BLAS (linear algebra) library based on GotoBLAS2
$ update-alternatives --get-selections | grep 'blas\|lapack'
libblas.so.3 auto /usr/lib/openblas-base/libblas.so.3
liblapack.so.3 auto /usr/lib/atlas-base/atlas/liblapack.so.3
$ python -c 'import numpy'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 153, in <module>
from . import add_newdocs
File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 18, in <module>
from .polynomial import *
File "/usr/lib/python2.7/dist-packages/numpy/lib/polynomial.py", line 19, in <module>
from numpy.linalg import eigvals, lstsq, inv
File "/usr/lib/python2.7/dist-packages/numpy/linalg/__init__.py", line 50, in <module>
from .linalg import *
File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 29, in <module>
from numpy.linalg import lapack_lite, _umath_linalg
ImportError: /usr/lib/liblapack.so.3: undefined symbol: ATL_chemv
$ dpkg -l | grep 'openblas\|atlas\|lapack'
ii libatlas3-base 3.10.1-4 amd64 Automatically Tuned Linear Algebra Software, generic shared
ii liblapack3 3.5.0-2ubuntu1 amd64 Library of linear algebra routines 3 - shared version
ii libopenblas-base 0.2.8-6ubuntu1 amd64 Optimized BLAS (linear algebra) library based on GotoBLAS2
$ update-alternatives --get-selections | grep 'blas\|lapack'
libblas.so.3 auto /usr/lib/openblas-base/libblas.so.3
liblapack.so.3 auto /usr/lib/lapack/liblapack.so.3
$ python -c 'import numpy'
$ dpkg -l | grep 'openblas\|atlas\|lapack'
ii liblapack3 3.5.0-2ubuntu1 amd64 Library of linear algebra routines 3 - shared version
ii libopenblas-base 0.2.8-6ubuntu1 amd64 Optimized BLAS (linear algebra) library based on GotoBLAS2
$ update-alternatives --get-selections | grep 'blas\|lapack'
libblas.so.3 auto /usr/lib/openblas-base/libblas.so.3
liblapack.so.3 auto /usr/lib/lapack/liblapack.so.3
$ python -c 'import numpy'
$ dpkg -l | grep 'openblas\|atlas\|lapack'
ii libatlas3-base 3.10.1-4 amd64 Automatically Tuned Linear Algebra Software, generic shared
$ update-alternatives --get-selections | grep 'blas\|lapack'
libblas.so.3 auto /usr/lib/atlas-base/atlas/libblas.so.3
liblapack.so.3 auto /usr/lib/atlas-base/atlas/liblapack.so.3
$ python -c 'import numpy'
答案 3 :(得分:1)
尝试检查LD_LIBRARY_PATH。您可能会指向该库的另一个版本,该版本不支持numpy调用所需的符号。我的Mac上也有同样的情况。
但请注意,问题可能无法直接显示,因为一个库可以使用LD_LIBRARY_PATH链接到下一个库。
在设置和不设置LD_LIBRARY_PATH的情况下,您可以检查以下命令是否有区别(暂时删除活动shell:取消设置LD_LIBRARY_PATH):
ldd /usr/lib/liblapack.so.3gf
就我而言,ISIS软件系统提供的库与numpy所需的板载库发生了冲突。