给一台电脑重新装了个系统配置了个环境,遇到些问题,搞了半天。
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升级部分参考