当前位置:  开发笔记 > 编程语言 > 正文

Numpy multiarray.so:未定义的符号:cblas_sgemm

如何解决《Numpymultiarray.so:未定义的符号:cblas_sgemm》经验,为你挑选了1个好方法。

我正在尝试安装numpy==1.10.2,scipymatplotlib在服务器上基于opensuse.我已经从源头安装numpyvirtualenv(我也尝试过pip - 当然也是同样的结果).现在,当我尝试numpy在python控制台中导入时,我收到以下错误:

ImportError: /home/user/.virtualenvs/project/lib/python2.7/site-packages/numpy/core/multiarray.so: undefined symbol: cblas_sgemm

注意:我不是这台服务器的超级用户.

编辑:

ldd /home/user/.virtualenvs/project/lib/python2.7/site-packages/numpy/core/multiarray.so`
linux-vdso.so.1 (0x00007fffa0d69000)
libtatlas.so.3 => /home/user/.local/usr/lib64/atlas/libtatlas.so.3 (0x00007fe366d66000)
libm.so.6 => /lib64/libm.so.6 (0x00007fe366a50000)
libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007fe3666b2000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe366496000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe3660f0000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe367a15000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fe365eec000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007fe365ce9000)

libtatlas.so.3 => /home/user/.local/usr/lib64/atlas/libtatlas.so.3 - 我因为libatlas的其他问题而将此链接起来: ImportError: /usr/lib64/atlas/libtatlas.so.3: undefined symbol: clapack_ilaenv

SOLLUTION

问题出在ATLAS lib上.根据@ali_m建议我numpy从源代码安装OpenBLAS而不是ATLAS.这里链接到如何使用BLAS安装numpy的说明.



1> ali_m..:

正如您在上面的注释中所提到的,您libtatlas.so.3从RPM包中提取并将其复制到本地目录中,而不是从源代码构建它或通过包管理器安装它.我确信这是问题的原因.

特别是,clapack_*cblas_*符号似乎没有在其中定义libtatlas.so.3.在我的Ubuntu机器上,如果sudo apt-get install libatlas-base-dev我得到两个不同的共享库:

~$ ldconfig -p | grep atlas
        liblapack_atlas.so.3 (libc6,x86-64) => /usr/lib/liblapack_atlas.so.3
        liblapack_atlas.so (libc6,x86-64) => /usr/lib/liblapack_atlas.so
        libatlas.so.3 (libc6,x86-64) => /usr/lib/libatlas.so.3
        libatlas.so (libc6,x86-64) => /usr/lib/libatlas.so

clapack_*cgemm_*符号在定义liblapack_atlas.so.3而不是libatlas_so.3:

~$ nm -D /usr/lib/libatlas.so.3 | grep clapack_ilaenv

~$ nm -D /usr/lib/libatlas.so.3 | grep cblas_sgemm

~$ nm -D /usr/lib/liblapack_atlas.so.3 | grep clapack_ilaenv
0000000000041d90 T clapack_ilaenv

~$ nm -D /usr/lib/liblapack_atlas.so.3 | grep cblas_sgemm
                 U cblas_sgemm

鉴于您没有管理员权限,因此无法通过正常的系统包管理器安装ATLAS,这里有三个可能的解决方案:

可能liblapack_atlas.so.3从不同的RPM包中提取二进制文件(或OpenSUSE等价物),并通过修改site.cfgnumpy源目录中的文件来获取numpy链接.

另一个选择是从源代码构建ATLAS,但根据我的经验,这是一个漫长而痛苦的过程.

我个人的建议是建立OpenBLAS相反,在我以前的答案描述在这里.它编译起来要容易得多,并且在我迄今为止遇到的每个基准测试中都有更好的性能.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有