首页 > 其他 > 详细

G2O版本导致的segmentation fault

时间:2020-10-07 21:51:18      阅读:120      评论:0      收藏:0      [点我收藏+]

1.起因

在用UBUNTU18.04的时候,cmake及make的过程是一切正常的,但是运行生成的可执行文件时,系统提示segmentation  fault(core dumped),也即段错误。看完网上的解决方案,却又无从下手。跟师兄交流,很可能是不同版本的g2o边和节点定义和求解器初始化时不同的,从而造成错误。后来经过测试,一个个测试CMakeLsts.txt当中链接的源文件,确定问题出在引用g2o库(g2o版本为:20170730)上,进一步锁定在语句:

g2o::EdgeSE3Expmap *pose_e = new g2o::EdgeSE3Expmap();

2.尝试利用ADD_DEFINITIONS以及cmake时添加参数解决问题

由于g2o本身不便于调节图优化过程中的参数,因此工程中已经引入了ceres库,可以注释掉g2o相关代码。(更换g2o版本或者尝试其他声明方式应该也可以解决问题,但是由于目前基本不需要g2o库,所我并没有尝试)此处我本来想采用ADD_DEFINITIONS并在cmake的时候控制参数,然而没有成功(还需要学习cmake practice再确定)。只能在引用g2o的头文件中设置参数不编译g2o相关代码:

CMakeLists.txt中添加G2O_ON参数
技术分享图片
在引用g2o的头文件中设置G2O_ON=0
技术分享图片
文件中涉及到g2o的代码形式:
技术分享图片

虽然这种方式在此处多次一举,但给我以启示,以后可以利用宏定义控制代码结构

G2O版本导致的segmentation fault

原文:https://www.cnblogs.com/xinzhaodc/p/13778036.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!