我下载了一个python包装的C ++代码,并尝试从源代码构建它,它编译时没有错误,但是当我运行最终结果时,它失败的方式似乎表明它至少找不到它本应链接的一个库。
让我感到惊讶的是,在distutils.core.Extension
中,您可以提供一个库列表,但没有错误或消息告诉我其中一个库不存在。我可以在列表中放置任何乱码字符串,它仍然可以正常运行。在Extension
中是否有任何设置?还是以其他方式检查?
供参考,这里是setup.py
代码(Ubuntu 14.04,Python 2.7):
coolmodule = Extension('cool',
sources = [
'cool/main_python.c'
],
libraries = [
'cool',
'stdc++'
'lapack',
'blas',
'gfortran',
'fftw3',
# if I add any gibberish string to this list,
# it still runs without error!
],
library_dirs = ['./build'],
extra_link_args = [
'./build/libcool.a'
]
)
setup(name = 'cool',
ext_modules = [coolmodule]
)
提前谢谢!!
答案 0 :(得分:0)
您是否正在创建作为Python模块导入的共享库?如果是这样,您可以使用Linux / Unix中的ldd
实用程序来查看模块所需的共享库。在Mac OS X上,等效工具为otool -L
(test)MacBook-Air-2:foo talumbau$ otool -L foo_ext.so
foo_ext.so:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 2577.0.0)
如果共享库需要其他库但未找到它们,ldd
或otool -L
将显示哪些库。然后,您可以跟踪它们并修改LD_LIBRARY_PATH
,以便在加载时将它们链接起来。