美文网首页
CMakeLists无法找到G2O包的情况

CMakeLists无法找到G2O包的情况

作者: 大二哈 | 来源:发表于2018-05-10 17:41 被阅读0次

    当使用g2o进行前段优化的时候发现make完成的g2o包无法找到,在CMakeLists.txt文件中也已经配置好了,却出现如下问题:


    2018-05-10 17-33-19屏幕截图.png

    显示无法定位g2o文件位置。
    阅读了g2o中的readme文件又重新安装了一遍依赖项,发现还是无法定位。
    再次看到上图的log信息发现,可能需要在camke_module文件夹中加入FindG2O文件来定位。
    加入的文件内容如下:

    # Find the header files
    
    FIND_PATH(G2O_INCLUDE_DIR g2o/core/base_vertex.h
      ${G2O_ROOT}/include
      $ENV{G2O_ROOT}/include
      $ENV{G2O_ROOT}
      /usr/local/include
      /usr/include
      /opt/local/include
      /sw/local/include
      /sw/include
      NO_DEFAULT_PATH
      )
    
    # Macro to unify finding both the debug and release versions of the
    # libraries; this is adapted from the OpenSceneGraph FIND_LIBRARY
    # macro.
    
    MACRO(FIND_G2O_LIBRARY MYLIBRARY MYLIBRARYNAME)
    
      FIND_LIBRARY("${MYLIBRARY}_DEBUG"
        NAMES "g2o_${MYLIBRARYNAME}_d"
        PATHS
        ${G2O_ROOT}/lib/Debug
        ${G2O_ROOT}/lib
        $ENV{G2O_ROOT}/lib/Debug
        $ENV{G2O_ROOT}/lib
        NO_DEFAULT_PATH
        )
    
      FIND_LIBRARY("${MYLIBRARY}_DEBUG"
        NAMES "g2o_${MYLIBRARYNAME}_d"
        PATHS
        ~/Library/Frameworks
        /Library/Frameworks
        /usr/local/lib
        /usr/local/lib64
        /usr/lib
        /usr/lib64
        /opt/local/lib
        /sw/local/lib
        /sw/lib
        )
      
      FIND_LIBRARY(${MYLIBRARY}
        NAMES "g2o_${MYLIBRARYNAME}"
        PATHS
        ${G2O_ROOT}/lib/Release
        ${G2O_ROOT}/lib
        $ENV{G2O_ROOT}/lib/Release
        $ENV{G2O_ROOT}/lib
        NO_DEFAULT_PATH
        )
    
      FIND_LIBRARY(${MYLIBRARY}
        NAMES "g2o_${MYLIBRARYNAME}"
        PATHS
        ~/Library/Frameworks
        /Library/Frameworks
        /usr/local/lib
        /usr/local/lib64
        /usr/lib
        /usr/lib64
        /opt/local/lib
        /sw/local/lib
        /sw/lib
        )
      
      IF(NOT ${MYLIBRARY}_DEBUG)
        IF(MYLIBRARY)
          SET(${MYLIBRARY}_DEBUG ${MYLIBRARY})
        ENDIF(MYLIBRARY)
      ENDIF( NOT ${MYLIBRARY}_DEBUG)
      
    ENDMACRO(FIND_G2O_LIBRARY LIBRARY LIBRARYNAME)
    
    # Find the core elements
    FIND_G2O_LIBRARY(G2O_STUFF_LIBRARY stuff)
    FIND_G2O_LIBRARY(G2O_CORE_LIBRARY core)
    
    # Find the CLI library
    FIND_G2O_LIBRARY(G2O_CLI_LIBRARY cli)
    
    # Find the pluggable solvers
    FIND_G2O_LIBRARY(G2O_SOLVER_CHOLMOD solver_cholmod)
    FIND_G2O_LIBRARY(G2O_SOLVER_CSPARSE solver_csparse)
    FIND_G2O_LIBRARY(G2O_SOLVER_CSPARSE_EXTENSION csparse_extension)
    FIND_G2O_LIBRARY(G2O_SOLVER_DENSE solver_dense)
    FIND_G2O_LIBRARY(G2O_SOLVER_PCG solver_pcg)
    FIND_G2O_LIBRARY(G2O_SOLVER_SLAM2D_LINEAR solver_slam2d_linear)
    FIND_G2O_LIBRARY(G2O_SOLVER_STRUCTURE_ONLY solver_structure_only)
    FIND_G2O_LIBRARY(G2O_SOLVER_EIGEN solver_eigen)
    
    # Find the predefined types
    FIND_G2O_LIBRARY(G2O_TYPES_DATA types_data)
    FIND_G2O_LIBRARY(G2O_TYPES_ICP types_icp)
    FIND_G2O_LIBRARY(G2O_TYPES_SBA types_sba)
    FIND_G2O_LIBRARY(G2O_TYPES_SCLAM2D types_sclam2d)
    FIND_G2O_LIBRARY(G2O_TYPES_SIM3 types_sim3)
    FIND_G2O_LIBRARY(G2O_TYPES_SLAM2D types_slam2d)
    FIND_G2O_LIBRARY(G2O_TYPES_SLAM3D types_slam3d)
    
    # G2O solvers declared found if we found at least one solver
    SET(G2O_SOLVERS_FOUND "NO")
    IF(G2O_SOLVER_CHOLMOD OR G2O_SOLVER_CSPARSE OR G2O_SOLVER_DENSE OR G2O_SOLVER_PCG OR G2O_SOLVER_SLAM2D_LINEAR OR G2O_SOLVER_STRUCTURE_ONLY OR G2O_SOLVER_EIGEN)
      SET(G2O_SOLVERS_FOUND "YES")
    ENDIF(G2O_SOLVER_CHOLMOD OR G2O_SOLVER_CSPARSE OR G2O_SOLVER_DENSE OR G2O_SOLVER_PCG OR G2O_SOLVER_SLAM2D_LINEAR OR G2O_SOLVER_STRUCTURE_ONLY OR G2O_SOLVER_EIGEN)
    
    # G2O itself declared found if we found the core libraries and at least one solver
    SET(G2O_FOUND "NO")
    IF(G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND)
      SET(G2O_FOUND "YES")
    ENDIF(G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND)
    

    保存好再编译发现可以正常编译了。
    翻书回去查看,发现该cmake_module文件夹就是给g2o库准备的,用于放置第三方的库文件。

    相关文章

      网友评论

          本文标题:CMakeLists无法找到G2O包的情况

          本文链接:https://www.haomeiwen.com/subject/wlrtdftx.html