視覺slam 14講 第7講 代碼運行問題 fatal error: g2o/solvers/eigen/linear_solver_eigen.h

測試高博的視覺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是什麼版本,可以去看這個帖子

https://blog.csdn.net/xiaoxiao133/article/details/82705460

我看了一下我的eigen版本,是最新的,沒有問題,這就很匪夷所思了,不管這些,我們先暫時暴力破解一下,直接把add_subdirectory(eigen)拿出來,放在第4行,直接無條件加入到library中。

重新cmake..   make   sudo make install

再次編譯ch7下的程序,程序編譯無誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章