PCL库和C++2011兼容问题

来源:互联网 发布:js 将数组变为字符串 编辑:程序博客网 时间:2024/06/15 22:50

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,然后编辑内容如下:

pythonimport syssys.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
http://img.blog.csdn.net/20151231120056673
http://stackoverflow.com/questions/26346690/debug-seg-fault-in-boostmathlanczos-with-libpcl-surface

0 0
原创粉丝点击