我正在尝试构建一个python包,它依赖于几个库,包括boost、boost-python和fftw。我可以编译这个包而没有任何错误,但是当我尝试使用steme --help命令运行该程序时,我得到了一个错误:
2016-08-11 15:07:55,571:ERROR: ImportError: dlopen(/Users/<>/.ENV/lib/python2.7/site-packages/STEME-1.9.1-py2.7-macosx-10.11-intel.egg/stempy/_release_build/_index.so, 2): Symbol not found: __ZN5boost6python6detail13current_scopeE
Referenced from: /Users/<>/.ENV/lib/python2.7/site-packages/STEME-1.9.1-py2.7-macosx-10.11-intel.egg/stempy/_release_build/_index.so
Expected in: flat namespace
in /Users/<>/.ENV/lib/python2.7/site-packages/STEME-1.9.1-py2.7-macosx-10.11-intel.egg/stempy/_release_build/_index.so我的理解是,文件_index.so正在寻找符号__ZN5boost6python6detail13current_scopeE,但找不到它。接下来,我使用otool -L检查了哪些库链接到了_index.so文件
/Users/<>/.ENV/lib/python2.7/site-packages/STEME-1.9.1-py2.7-macosx-10.11-intel.egg/stempy/_release_build/_index.so:
/usr/local/opt/fftw/lib/libfftw3.3.dylib (compatibility version 8.0.0, current version 8.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)基于此,我认为发生的情况是boost-python动态库在编译期间没有正确地链接到_index.so。为了检查我是否在boost-python dylib上运行了nm -g (这些dylib是使用brew安装的,还有其他提到的依赖项)。在libboost_python.dylib文件中找到了缺少的符号:
0000000000031d08 S __ZN5boost6python6detail13current_scopeE
那么,我的下一个问题是,如何将libboost_python.dylib文件(位于/usr/local/Cellar/boost-python/1.61.0/lib)链接到_index.so文件?这能解决问题吗?有没有需要设置的编译器标志,以确保构建链接正确?
发布于 2016-08-12 04:58:57
在启动二进制文件时,请尝试在路径中包含/usr/local/Cellar/boost-python/1.61.0/lib。就像这样
$ export PATH=$PATH:/usr/local/Cellar/boost-python/1.61.0/lib
$ ./your-binary库的链接就在那里,否则你不可能通过otool找到它。我认为程序没有找到共享库,因为在路径中找不到它。
这个错误看起来与windows中的"DDL not found“错误类型非常相似,可以通过在当前目录或路径中提供DDL来修复。
https://stackoverflow.com/questions/38905527
复制相似问题