1. 程式人生 > >PCL1.8與boost1.58的依賴問題----------Ubuntu16.04重灌PCL1.8筆記

PCL1.8與boost1.58的依賴問題----------Ubuntu16.04重灌PCL1.8筆記

給一臺電腦重新裝了個系統配置了個環境,遇到些問題,搞了半天。

pcl issue有人提交也沒有個解決辦法。晚上搞了下解決了問題。

(1)問題描述:

../lib/libpcl_recognition.so.1.8.1: undefined reference to `boost::filesystem::path_traits::dispatch(boost::filesystem::directory_entry const&, std::string&)'
collect2: error: ld returned 1 exit status
tools/CMakeFiles/pcl_train_linemod_template.dir/build.make:147: recipe for target 'bin/pcl_train_linemod_template' failed
make[2]: *** [bin/pcl_train_linemod_template] Error 1

(2)原因分析(走過的坑,可略過):

按照提示是boost的問題,很簡單就是為cmakelist設定boost路徑:

set(Boost_LIBRARY_DIR /usr/lib/x86_64-linux-gnu/)

然而並沒有解決問題,後來換了多個pcl版本,均編譯失敗。也是同樣問題。

(3)解決辦法:

後來想到pcl依賴的各種庫版本有要求,於是升級boost1.58到boost1.60解決了問題。另外臺電腦(Ubuntu16.04+boost1.58)卻能編譯通過。應該是PCL更新的緣故。

(4)升級boost方法

我們採用原始碼編譯的方式,ubuntu的源也更不到更新的boost。

1刪除boost1.58

libboost1.58-all-dev

2下載boost1.60原始碼

https://sourceforge.net/projects/boost/files/boost-binaries/1.60.0/

3解壓原始碼並進入目錄

4檢視需要單獨編譯模組

./bootstrap.sh --show-libraries

5選擇編譯模組

./bootstrap.sh --with-libraries= atomic,chrono,container,context,coroutine,coroutine2,date_time,exception,filesystem,graph,graph_parallel,iostreams,locale,with-log,math,metaparse,mpi,program_options,python,random,regex,serialization,signals,system,test,thread,timer,type_erasure,wave

6編譯

sudo ./b2

7複製標頭檔案

sudo cp -a stage/lib /usr
sudo cp -a boost /usr/include

boost升級部分參考

1

2