1. 程式人生 > >視覺slam 14講 第7講 程式碼執行問題 fatal error: g2o/solvers/eigen/linear_solver_eigen.h

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

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

重新cmake..   make   sudo make install

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