视觉slam 14讲 第7讲 代码运行问题 fatal error: g2o/solvers/eigen/linear_solver_eigen.h

测试高博的视觉slam 第7讲的实验时

到对应的目录下 ch7里,创建build文件夹,进入,cmake..   make这个时候出了个问题。

程序编译的时候,到这一行

#include 

报错,报错信息如题目所示

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下的程序,程序编译无误。

你可能感兴趣的:(linux,编译环境)