跨工程編譯orbslam3記憶體中斷問題

溫帶海洋發表於2020-10-27

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

相關文章