跨工程编译orbslam3内存中断问题

orbslam3 独自编译运行内存中断问题

最近在项目中需要在自己的数据集下跑通orbslam3,在完成编译后运行程序时发现会报(segmentation fault)内存中断问题,检查代码发现输入的image和imu都是正常的,中断在g2o内部,最后发现是cmake中一个编译选项导致的

在编译g2o时,有段代码设置了编译选项 -march=native,这个选项决定了g2o使用eigen时内部矩阵的对齐方式,在使用orbslam3时,cmakelist中的match方式需要和g2o中的march方式保持一致,不然在运行时会导致g2o内部内存中断错误

# Compiler specific options for gcc
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -march=native")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -march=native")
# SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
# SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")

对应代码位置分别在
g2o cmakelist 57~60行
orbslam3 cmakelist 12~16行

orbslam2 issue:https://github.com/raulmur/ORB_SLAM2/pull/844
g2o issue:https://github.com/RainerKuemmerle/g2o/pull/314

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页