Caffe-SSD錯誤:.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail_106501::cpp_reg
阿新 • • 發佈:2018-11-12
編譯Caffe-SSD時遇到以下錯誤:
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail_106501::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail_106501::cpp_regex_traits_implementation< char>::transform_primary(char const*, char const*) const'
collect2: error: ld returned 1 exit status
······
解決方法:
一般這種情況是由於環境中缺少boost包導致的,雖然在安裝依賴包的時候可能安裝,但還是重新對這個包編譯以下比較好。剛開始的時候我也安裝依賴包了,為了方便就沒有重新編譯,結果這個錯誤嘗試了很多方法,一直無法解決。最後在即將崩潰的時候嘗試了重新編譯boost,這個問題竟然被解決了!!
文章目錄
1. boost安裝包下載解壓
boost安裝包下載安裝地址:https://www.boost.org/
我下載的是boost_1_68_0_rc1.zip版本,讀者也可以自行選擇版本,最後是1.60以上。
對下載的安裝包進行解壓:
unzip boost_1_68_0_rc1.zip
2. 設定編譯器和所選庫
進如解壓目錄:
cd boost_1_68_0
執行bootstrap.sh指令碼並設定相關引數.
./bootstrap.sh --with-libraries=all - -with-toolset=gcc
- –with-libraries:指編譯哪些boost庫,all的話就是全部編譯,只想編譯部分庫的話就把庫的名稱寫上,之間用 , 號分隔即可,這裡建議選擇all
- –with-toolset:指編譯時使用哪種編譯器,Ubuntu下使用gcc即可,如果系統中安裝了多個版本的gcc,在這裡可以指定gcc的版本,比如–with-toolset=gcc-5.5
命令執行完成後看到顯示如下即為成功:
Building Boost.Build engine with toolset gcc... tools/build/src/engine/bin.linuxx86_64/b2
Detecting Python version... 2.6
Detecting Python root... /usr
Unicode/ICU support for Boost.Regex?... not found.
Generating Boost.Build configuration in project-config.jam...
Bootstrapping is done. To build, run:
./b2
To adjust configuration, edit 'project-config.jam'.
Further information:
- Command line help:
./b2 --help
- Getting started guide:
http://www.boost.org/more/getting_started/unix-variants.html
- Boost.Build documentation:
http://www.boost.org/build/doc/html/index.html
3. 編譯
在終端執行:
./b2 toolset=gcc
編譯過程會持續好一會,可以喝杯茶~
編譯成功會有以下提示:
...updated XXX targets... //XXX指一個數字
4.安裝
在終端執行:
./b2 install --prefix=/usr
- –prefix=/usr:用來指定boost的安裝目錄,不加此引數的話預設的標頭檔案在/usr/local/include/boost目錄下,庫檔案在/usr/local/lib/目錄下。這裡把安裝目錄指定為–prefix=/usr則boost會直接安裝到系統標頭檔案目錄和庫檔案目錄下,可以省略配置環境變數。
安裝完成會有以下介面:
...updated XXXX targets... //XXX指一個數字
使安裝的boost庫立即生效.
ldconfig //更新系統的動態連結庫
此時再回去執行以下步驟:
sudo make clean
sudo make all -j32 //這一步也許會出現其他錯誤,但是此錯誤解決
//如果出現其他錯誤,可以多make clean 和make all 幾次,再不行可以檢視其他解決方法。
至此,boost庫編譯安裝完成!
參考部落格:Linux編譯和安裝boost庫