Ben*_*Ben 6 python installation linker cython undefined-symbol
我有一个c ++程序,我正在尝试包装/转换为Cython.它使用特定的库,由于某种原因,不会导致导入的工作模块.顺便说一句,有一个工作的c ++程序.这是setup.py:
ext_modules = [
Extension(
name="libnmfpy",
sources=["interface/nmf_lib.pyx"],
include_dirs = ["../src/", numpy.get_include()],
libraries=["nmf","mpi_cxx","mpi","m"],
library_dirs=["../build/Linux/bin.release","/usr/local/lib/","/usr/lib"],
language="c++",)
]
setup(
name = 'libnmfpy',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules,
)
Run Code Online (Sandbox Code Playgroud)
我应该提一下,它似乎是导致问题的libnmf.libnmf的第一个构建将导致此脚本生成此错误:
/usr/bin/ld: ../build/Linux/bin.release/libnmf.a(nmf.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
../build/Linux/bin.release/libnmf.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
当我用-fPIC重建libnmf时,setup会生成一个libnmfpy.so,但是当我在另一个脚本中导入它时,我会得到上面提到的未定义符号:
Traceback (most recent call last):
File "test.py", line 1, in <module>
import libnmfpy
ImportError: $path/cython/libnmfpy.so: undefined symbol: _ZN4elem6lapack3SVDEiiPdiS1_
Run Code Online (Sandbox Code Playgroud)
如果它会有所帮助,这是我的搜索建议:
nm libnmfpy.so | grep _ZN4elem6lapack3SVDEiiPdiS1_
U _ZN4elem6lapack3SVDEiiPdiS1_
nm ../build/Linux/bin.release/libnmf.a | grep _ZN4elem6lapack3SVDEiiPdiS1_
U _ZN4elem6lapack3SVDEiiPdiS1_
Run Code Online (Sandbox Code Playgroud)
这就是我猜错误的原因.我看一下我认为是libnmf所构建的有问题的库:
nm $another_path/lib/libelemental.a | grep _ZN4elem6lapack3SVDEiiPdiS1_
0000000000005290 T _ZN4elem6lapack3SVDEiiPdiS1_
Run Code Online (Sandbox Code Playgroud)
我对图书馆和链接器不太熟悉,所以任何帮助都会受到赞赏.谢谢
编辑:一点点挖掘让我意识到了什么.我应该注意Mac OS X和Linux之间的区别吗?我为之工作的人写的最初报告没有像这样的构建错误
好吧,我无法尝试重新创建您的设置,然后在我的设置上制定并测试解决方案,因为我没有您的源代码,但在我看来,当您使用 fpic 重新编译 libnmf 时,它是使用动态链接重新编译的,而之前它曾经是静态链接的。
如果我的猜测是正确的,那么你可以尝试:
-fPIC使用, AND再次编译 libnmf -static。"elemental"到libraries列表 - 这将使链接器也获取该库。您应该注意到,方法#1 通常被认为不太理想,但正如我所说,它可能最初是这样编译的。然而,#2 可能需要更多工作,因为如果需要其他库,您还必须找到并添加它们。
| 归档时间: |
|
| 查看次数: |
5442 次 |
| 最近记录: |