18.04里面安装了两个版本的pcl,一个是安装ros的时候安装的pcl1.8,另一个是安装的源码pcl1.12版本。一直相安无事,今天在我编译lego-loam的时候,突然就冲突了。卡了我两个小时,到处找原因,网上基本上没有相似的错误。最后在github的issue里面在到了一个类似的:
Cmake not working · Issue #165 · RobustFieldAutonomyLab/LeGO-LOAM · GitHub
应该是共享库冲突,就是说ros原装的pcl1.8和我后来安装的源码版本的pcl1.12冲突了。
知道是什么错误就好处理了。
然后就指定了ros版本的pcl1.8,之后就成功catkin_make -j1了。
下面来记录一下怎么指定不同版本pcl,所有的操作只用在CMakeLists.txt中完成:
1.指定ros安装版本的pcl
set(PCL_DIR "/usr/lib/x86_64-linux-gnu/cmake/pcl")
find_package(PCL 1.8 REQUIRED QUIET)
message("pcl_direction: " ${PCL_DIR} )
message("pcl_include_direction: " ${PCL_INCLUDE_DIRS} )
在CMakeLists.txt中就这样修改就可以了,可以观察下message输出:
可以看到pcl_include_direction:中 /usr/include/pcl-1.8放到了第一个。
2.指定源码安装的pcl1.12版本
set(PCL_DIR "/usr/local/include/pcl-1.12")
find_package(PCL 1.12 REQUIRED)
message("pcl_direction: " ${PCL_DIR} )
message("pcl_include_direction: " ${PCL_INCLUDE_DIRS} )
message输出:
/usr/local/include/pcl-1.12排到了首位。
比较容易,记录一下,免得以后碰到类似的问题,找记录就好。