2016-08-11 96 views
0

我試圖構建一個依賴於包括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文件?這是否會解決問題?是否需要設置一些編譯器標誌以確保構建正確鏈接?

回答

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中找到。

此錯誤與Windows中的「找不到DDL」錯誤類型非常相似,可以通過在當前目錄或PATH中提供DDL來解決此問題。

+0

沒有工作,仍然收到相同的錯誤 – themantalope

+0

我也會評論'otool'沒有找到'boost-python'庫的鏈接 – themantalope

+0

你如何鏈接boost-python庫? (構建工具,如CMake,Make,...) – ramses728

相關問題