在與我的makefile問題作鬥爭之後,我現在討論了兩個庫應該如何交互的問題。所以,這是在Linux上(CentOS 6.2 - 6.4,這似乎在工具方面差異很大)。項目,從總體上看,是兩種口味在混合庫類型(靜態和動態)方面存在問題
,其用於與其他C++ appications聯(A *某文件)- A C++靜態庫
- 共享*。所以要被部署通過蟒蛇使用Boost.python部署
我有一切編譯,但我沒有正確鏈接。在靜態庫的情況下,它是建立在兩個方面:
- 如果爲了與其他C++代碼鏈接,
-fPIC
是不使用 - 如果意味着要鏈接到Python模塊, 使用
-fPIC
我通過傳遞參數給make程序進行控制。目前,我正在嘗試構建boost python模塊,因爲靜態的東西編譯得很好。所以,我依賴boost庫和zlib。最終連接命令看起來像這樣:
g++ -o pythonmod.so -L/boost/boost_libs -L/zlibs -lz -lboost_python -lboost_thread -lboost_regex -lboost_system /path/to/static.a -fPIC -shared [many_objects]
的「many_objects」來自於各種包裝,和其他代碼,即從包裝在代碼中的Boost.Python層中的「純」 C++。這些目標文件中的每一個都使用-fPIC編譯。他們編譯爲:
g++ -I/boost/boost_1_47 -I/usr/include/python2.6 -D _linux -MMD -std=c++0x -c -m32 -fPIC <input> -o <output>
編譯歸檔文件的目標文件的行看起來與上面非常相似,只是它們不包括python include目錄。
我在這裏發現了類似問題的其他鏈接,並嘗試瞭解決方案,但迄今爲止無濟於事。例如,this link使用-Wl,--whole-archive ... -Wl,--no-whole-archive
。我在嘗試在靜態庫存檔中鏈接-fPIC之前嘗試使用此解決方案。現在,我正在這樣做,我試過this solution,但也無濟於事。在每種情況下,每次我加載python並導入模塊時,都會遇到某種未定義的符號錯誤 - >鏈接期間出錯。
我應該如何將這些庫混合在一起以使python模塊工作?