LiO-SAM编译过程中PCL版本的适用问题@TOC
问题
我最开始的PCL版本是目前最新的pcl-1.11,这个版本编译LIO-SAM时,使用pcl_conversions.h的函数(用来转换ros pointCloud2 )会出现带有boost::shared_ptr的函数未定义的问题,如下:
undefined reference to pcl::PCLBasepcl::PointXYZI::setIndices(boost::shared_ptr<std::vector<int, std::allocator > const> const&)
查看github上pcl-1.11的release notes发现以下内容:
Starting with PCL 1.11, PCL uses std::shared_ptr and std::weak_ptr instead of the boost smart pointers. The change leverages type aliases included with the 1.10.0 release. PCL 1.11 also introduces pcl::index_t which should be used for the size of point types instead of int, std::size_t, etc. EOL for deprecated features is also explicitly mentioned in the deprecation compile time warnings
pcl_conversions是1.7版本的函数,在pcl-1.11中已经不支持,有位老哥介绍了他的解决方案,但是我试过了,首先他说的“从perception_cpl.git直接拉下2.1.0和1.71两个版本”就没法实现,因为那里没有2.1.0和1.7.1的版本branch。
解决方案
卸载 pcl-1.11
这里介绍一个简单的卸载cmake源码安装的包的卸载方法:首先找到install_manifest.txt文件的文件夹(一般就在源码文件夹里),打开命令行,输入:
cat install_manifest.txt | sudo xargs rm
安装pcl-1.7
我选择的是ROS模块的pcl-1.7(听说pcl-1.8也可以,读者不妨一试,手动狗头),安装也很简单, 可以参考这个博客。