recompile with -fPIC /usr/local/lib/libboost_python.a: could not read symbols: Bad value

在用boost庫的時候遇到了一些挫折,本文記錄下來方便大家參考:

1. libboost_python.so: file not recognized: File truncated 


我們來看一下libboost_python.so文件,確實是存在的:



那麼file truncated大多是因爲文件損壞所致,所以我們重裝下boost(安裝命令可以用這個稍微改改),即可解決該問題。



2. /usr/bin/ld: /usr/local/lib/libboost_python.a(list.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libboost_python.a: could not read symbols: Bad value

這又是鬧哪樣?

google到結果說在編譯命令中加入參數-fPIC就可以了,可是我makefile中明明有-fPIC啊,這個問題其實出在libboost_python.a的編譯上。原因在於boost的編譯工具bjam在編譯boost靜態庫時,沒有使用-fPIC選項,使得編譯出來的靜態庫沒有重定位能力。這樣在64位機器上boost編譯出來的靜態庫幾乎全部不能用。並且bjam工具不提供定製編譯參數的功能。


解決方案:

下載用boost和python編譯出來的靜態庫,替換boost_python.a(在安裝目錄下,如/usr/local/lib)




參考:

boost中靜態庫編譯沒有-fPIC選項的問題解決方案






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章