如何在 C++ 中克隆、构建和 link g2o 框架
How to clone, build, and link g2o framework in C++
我想在 Ubuntu 18.04 上的 C++11 项目中使用 g2o 库,但我无法使构建工作。我有所有的依赖。但是我不能通过 CMakeLists.txt
link g2o 库到我的项目
我是 C++ 依赖的新手。
我已经尝试克隆 https://github.com/RainerKuemmerle/g2o 存储库并使用 cmake 构建它。
结构如下:
MY_PROJECT
|__ cmake_modules
|__ project_src
|__ CMakeLists.txt
|__ Thirdparty
|____ g2o
|____ bin
|____ build
|____ cmake_modules # findG2O.cmake
|____ lib # .so shared libraries (all of them, like 20)
|____ g2o
|____ core # headers and source files
|____ solvers
|____ types
|____ CMakeLists.txt
我从 g2o 内部添加了 cmake_modules 到 my_project 的 CMakeLists.txt
然后尝试用 find_package 找到它,但没有找到。
LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/g2o/cmake_modules)
find_package(G2O REQUIRED)
if(NOT G2O_FOUND)
message(FATAL_ERROR "G2O not found.")
endif()
我在 https://github.com/RainerKuemmerle/g2o/blob/master/cmake_modules/FindG2O.cmake
中保持 findG2O.cmake 不变
我应该更改 findG2O.cmake 吗?我真的不明白发生了什么。我应该如何继续构建源代码和 linking?
我在 Whosebug 上的任何地方都没有找到我的问题的准确答案,但也许我只是不知道我在搜索什么。
错误信息是:
/home/miki/ORB_SLAM2/Thirdparty/g2o/g2o/types/sim3/types_seven_dof_expmap.h:29:10: fatal error: g2o/config.h: No such file or directory #include "g2o/config.h"
当我尝试更改为#include "../../config.h" 时,它起作用了。我怎样才能在 CMakeLists 中解决它,这样我就不必更改第三方库中的所有包含项?
执行命令后生成config.h
cmake ..
在文件夹中
MY_PROJECT/Thirdparty/g2o/build
,并且此文件包含一些信息,例如您尝试使用的已用浮点类型或库类型。我想这样的信息会被用来自动修改一些代码块。
默认情况下,文件config.h的位置在文件夹
中
MY_PROJECT/Thirdparty/g2o/build/g2o
或者你也可以使用命令
make install
将此文件复制到安装路径。
如果你的${CMAKE_PREFIX_INTALL}是/home/user/,那么文件config.h的位置在文件夹
中
/home/user/include/g2o
如果你想用find_package找到g2o库,那么你需要写
set (G2O_ROOT /home/user)
在 find_package.
之前
最后把header路径加入CMakeLists.txt,如
include_directories(${G2O_INCLUDE_DIR}
我想在 Ubuntu 18.04 上的 C++11 项目中使用 g2o 库,但我无法使构建工作。我有所有的依赖。但是我不能通过 CMakeLists.txt
link g2o 库到我的项目我是 C++ 依赖的新手。
我已经尝试克隆 https://github.com/RainerKuemmerle/g2o 存储库并使用 cmake 构建它。
结构如下:
MY_PROJECT
|__ cmake_modules
|__ project_src
|__ CMakeLists.txt
|__ Thirdparty
|____ g2o
|____ bin
|____ build
|____ cmake_modules # findG2O.cmake
|____ lib # .so shared libraries (all of them, like 20)
|____ g2o
|____ core # headers and source files
|____ solvers
|____ types
|____ CMakeLists.txt
我从 g2o 内部添加了 cmake_modules 到 my_project 的 CMakeLists.txt 然后尝试用 find_package 找到它,但没有找到。
LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/g2o/cmake_modules)
find_package(G2O REQUIRED)
if(NOT G2O_FOUND)
message(FATAL_ERROR "G2O not found.")
endif()
我在 https://github.com/RainerKuemmerle/g2o/blob/master/cmake_modules/FindG2O.cmake
中保持 findG2O.cmake 不变我应该更改 findG2O.cmake 吗?我真的不明白发生了什么。我应该如何继续构建源代码和 linking?
我在 Whosebug 上的任何地方都没有找到我的问题的准确答案,但也许我只是不知道我在搜索什么。
错误信息是:
/home/miki/ORB_SLAM2/Thirdparty/g2o/g2o/types/sim3/types_seven_dof_expmap.h:29:10: fatal error: g2o/config.h: No such file or directory #include "g2o/config.h"
当我尝试更改为#include "../../config.h" 时,它起作用了。我怎样才能在 CMakeLists 中解决它,这样我就不必更改第三方库中的所有包含项?
执行命令后生成config.h
cmake ..
在文件夹中
MY_PROJECT/Thirdparty/g2o/build
,并且此文件包含一些信息,例如您尝试使用的已用浮点类型或库类型。我想这样的信息会被用来自动修改一些代码块。
默认情况下,文件config.h的位置在文件夹
中MY_PROJECT/Thirdparty/g2o/build/g2o
或者你也可以使用命令
make install
将此文件复制到安装路径。
如果你的${CMAKE_PREFIX_INTALL}是/home/user/,那么文件config.h的位置在文件夹
中/home/user/include/g2o
如果你想用find_package找到g2o库,那么你需要写
set (G2O_ROOT /home/user)
在 find_package.
之前最后把header路径加入CMakeLists.txt,如
include_directories(${G2O_INCLUDE_DIR}