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")