1. 程式人生 > >Caffe-SSD錯誤:.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail_106501::cpp_reg

Caffe-SSD錯誤:.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail_106501::cpp_reg

編譯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庫