視覺slam 14講 第7講 程式碼執行問題 fatal error: g2o/solvers/eigen/linear_solver_eigen.h
阿新 • • 發佈:2018-12-17
測試高博的視覺slam 第7講的實驗時
到對應的目錄下 ch7裡,建立build資料夾,進入,cmake.. make這個時候出了個問題。
程式編譯的時候,到這一行
#include <g2o/solvers/csparse/linear_solver_csparse.h>
報錯,報錯資訊如題目所示
fatal error: g2o/solvers/eigen/linear_solver_eigen.h
後面的報錯資訊,大致說的就是,不存在這個檔案或者目錄。
安裝g2o的時候,說g2o的安裝檔案是放在/usr/local/include/g2o裡
cd進去,發現根本就沒有eigen這個東西。
上網baidu吧,全是一些風馬牛不相及的東西,關鍵時刻還是得靠自己啊。
我們先去下好的g2o的原始碼檔案當中去看看,有沒有這個eigen檔案
定位到原始碼檔案/g2o/solvers當中去,發下裡面有eigen這個資料夾!!!
點進去,發現這個資料夾下存在CMakeLists.txt檔案,開啟,程式碼如下:
add_library(solver_eigen ${G2O_LIB_TYPE} solver_eigen.cpp linear_solver_eigen.h ) set_target_properties(solver_eigen PROPERTIES OUTPUT_NAME ${LIB_PREFIX}solver_eigen) if (APPLE) set_target_properties(solver_eigen PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib") endif() target_link_libraries(solver_eigen core) install(TARGETS solver_eigen EXPORT ${G2O_TARGETS_EXPORT_NAME} RUNTIME DESTINATION ${RUNTIME_DESTINATION} LIBRARY DESTINATION ${LIBRARY_DESTINATION} ARCHIVE DESTINATION ${ARCHIVE_DESTINATION} INCLUDES DESTINATION ${INCLUDES_DESTINATION} ) file(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h" "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp") install(FILES ${headers} DESTINATION ${INCLUDES_INSTALL_DIR}/solvers/eigen)
從這個檔案中,我們大致能看出來,之前報錯的linear_solver_eigen.h是加入的library中的,說明在在這一級是沒有問題的。
返回到上一級,還有一個CMakeLists.txt檔案,我們開啟,程式碼如下:
add_subdirectory(pcg) add_subdirectory(dense) add_subdirectory(structure_only) if(CSPARSE_FOUND) add_subdirectory(csparse) add_subdirectory(slam2d_linear) endif() if(CHOLMOD_FOUND) add_subdirectory(cholmod) endif(CHOLMOD_FOUND) # Sparse Module of Eigen is stable starting from 3.1 if (DEFINED EIGEN3_VERSION) if(${EIGEN3_VERSION} VERSION_GREATER "3.1.0" OR ${EIGEN3_VERSION} VERSION_EQUAL "3.1.0") add_subdirectory(eigen) endif() endif()
可以看出來,在這裡,eigen的新增變得有條件的,條件是,當前系統安裝了eigen,並且eigen的版本要大於等於3.1。
如果你安裝了eigen,但不知道自己的eigen是什麼版本,可以去看這個帖子
我看了一下我的eigen版本,是最新的,沒有問題,這就很匪夷所思了,不管這些,我們先暫時暴力破解一下,直接把add_subdirectory(eigen)拿出來,放在第4行,直接無條件加入到library中。
重新cmake.. make sudo make install
再次編譯ch7下的程式,程式編譯無誤。