1

我下载了一个 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]
)

先感谢您!!

4

1 回答 1

0

您是否正在创建一个作为 Python 模块导入的共享库?如果是这样,您可以使用lddLinux/Unix 中的实用程序来查看模块所需的共享库。在 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,以便在加载时将它们链接起来。

于 2014-09-19T21:34:46.433 回答