我正在尝试构建一个依赖于几个库的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
但无法找到它。接下来,我使用_index.so
检查了哪些库链接到otool -L
文件:
/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
。要检查我是否在nm -g
dylib上运行了boost-python
(使用brew
安装了它们,以及其他提到的依赖项)。在libboost_python.dylib
文件中找到了缺少的符号:
0000000000031d08 S __ZN5boost6python6detail13current_scopeE
那么,我的下一个问题是,如何将libboost_python.dylib
文件(位于/usr/local/Cellar/boost-python/1.61.0/lib
)与_index.so
文件相关联?这会解决问题吗?是否需要设置一些编译器标志以确保构建正确链接?
答案 0 :(得分:0)
尝试在启动二进制文件时在您的路径中包含/usr/local/Cellar/boost-python/1.61.0/lib
。像
$ export PATH=$PATH:/usr/local/Cellar/boost-python/1.61.0/lib
$ ./your-binary
图书馆的链接就在那里,否则您无法通过otool
找到它。我认为该程序没有找到共享库,因为它无法在PATH中找到。
此错误似乎非常类似于未找到的&#34; DDL&#34; Windows中的错误类型,可以通过在当前目录或PATH中提供DDL来修复。