PCL1.8與boost1.58的依賴問題----------Ubuntu16.04重灌PCL1.8筆記
阿新 • • 發佈:2019-01-10
給一臺電腦重新裝了個系統配置了個環境,遇到些問題,搞了半天。
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升級部分參考