我試圖構建一個依賴於包括boost,boost-python和fftw在內的多個庫的python包。我能夠編譯包沒有任何錯誤,但是當我嘗試與steme --help
命令運行程序,我得到一個錯誤:Mac OS X將.so文件鏈接到動態庫
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
。檢查我在boost-python
dylibs上運行nm -g
(使用brew
安裝,以及其他提到的依賴項)。缺少的符號是在libboost_python.dylib
文件中找到:
0000000000031d08 S __ZN5boost6python6detail13current_scopeE
所以,我的下一個問題是,我怎麼鏈接libboost_python.dylib
文件(位於/usr/local/Cellar/boost-python/1.61.0/lib
)到_index.so
文件?這是否會解決問題?是否需要設置一些編譯器標誌以確保構建正確鏈接?
沒有工作,仍然收到相同的錯誤 – themantalope
我也會評論'otool'沒有找到'boost-python'庫的鏈接 – themantalope
你如何鏈接boost-python庫? (構建工具,如CMake,Make,...) – ramses728