高翔SLAM例程运行提示段错误,进不去主函数的解决办法

解决SLAM代码运行错误
本文记录了解决高翔SLAM代码运行时出现的错误过程,该错误表现为编译通过但运行时出现段错误,核心问题在于CMakeLists.txt文件中的-march=native设置与处理器不兼容。

最近运行高翔的SLAM代码,遇到了错误,经过调试发现连主函数都没进去,但是cmake,make是通过的,网上没找到合适的答案(也不好找,因为错误提示对应的错误太多了),现在解决了在这里记录一下方便后来者。

现象:

编译通过,但运行代码的错误提示如下:

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

段错误 (核心已转储)

 

经过调试,发现,代码连主函数都没进去就退出了。
 

解决方法:

高翔的代码里,CMakeLists.txt里写了这么一句:

set( CMAKE_CXX_FLAGS "-std=c++11 -march=native -O3" )

如图,问题出在选中部分,查询了一下:http://sdf.org/~riley/blog/2014/10/30/march-mtune/
-march=native 作用大概是对代码生成的可执行文件专门为当前处理器进行优化,并且不向后兼容。

去掉选中部分后,运行正常,笔者用的是AMD ryzen处理器,猜测可能与处理器有关,也许是其它的库使用了-march=native,对英特尔处理器进行了优化,但我用的是AMD ryzen处理器,就出错了。当然这是我猜的,如果有人知道真正原因,希望留言一下告诉我 :)

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值