概述
PCL库和C++2011兼容问题
首先,我的系统环境是ubuntu 14.04、ROS indigo。
做课题的时候遇到这么一个问题,我的wifi信号采集和制图的包用到了pcl_ros和pcl_conversions库,这两个库依赖了PCL库,然后和高斯库交互数据利用GPR(Gaussian Process Regression)的方法来处理wifi信号,在GPR库中用到了一些C++2011的特性,这样当我把两个包合起来的时候就遇到了一些问题。编译的时候通过了,但是运行的时候提示段错误:
Segmentation fault (core dumped)
google了一些,人们说是C++2011和PCL库在使用的时候会导致boost库冲突。以下是我的几次尝试:
尝试一
这个方法最后说是因为使用PCL-1.7库不支持C++2011所以需要安装PCL1.8,按照最后提示的,先下载库,然后在库的CMakeLists.txt文件添加了设置C++2011的变量SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=gnu++0x")
,新建build目录
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
挺大的,编译完之后有6个多G,然修改你要用PCL的库指定为PCL 1.8 版本,然后再message里面你可以输出使用库的路径message(${PCL_DIR})
,这次尝试并没有解决这个问题。给作者库的作者发邮件,作者说PCL库目前不支持C++2011,就要在放弃之际,但是突然看到另一个人说的解决方法,然后接着尝试。
尝试二,根据尝试二是修改PCL库你的一行代码,具体大家看链接,但是我按步骤操作完,还是没有解决问题。意外之际看到了别人说用gdb调试,然后开始接着尝试。
尝试三,gdb ./path/executable_file
得到了如下提示:ImportError: No module named 'libstdcxx',
解决:在用户的主目录下新建文件.gdbinit,然后编辑内容如下:
python
import sys
sys.path.append("/usr/share/gcc-4.8/python")
end
解决了这个问题之后继续调试,如下:
从途中可以看出来问题就出在最后一行,难道是还是调用的PCL-1.7的库,查看了一下库的路径,不是啊!然后继续google,看到有人说,如果编译的时候用到了C++2011,用Debug编译类型就会出现这个问题,如果用release编译就可以了,或者在Debug模式下用-O1选项来优化就可以了,具体如下:
改:set(CMAKE_BUILD_TYPE Debug)
为:set(CMAKE_BUILD_TYPE Release)
或:set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O1")
这样,编译、运行的就没有问题了:
课题还在继续。。。后面发现问题我再接着补充!有不对的地方,希望大家能指出来!
参考:
https://github.com/felixendres/rgbdslam_v2/issues/8%20%E5%8E%9F%E5%9B%A0+%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95
https://github.com/PointCloudLibrary/pcl/issues/980
https://file2.kaopuke.com:8081/files_image/2023061020/202306102048071158134.png
http://stackoverflow.com/questions/26346690/debug-seg-fault-in-boostmathlanczos-with-libpcl-surface
最后
以上就是狂野灯泡为你收集整理的PCL库和C++2011兼容问题PCL库和C++2011兼容问题的全部内容,希望文章能够帮你解决PCL库和C++2011兼容问题PCL库和C++2011兼容问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复