c++ - 如何在 C++ 中克隆、构建和链接 g2o 框架

标签 c++ build static-linking g2o

我想在 Ubuntu 18.04 上的 C++11 项目中使用 g2o 库,但我无法使构建工作。我有所有的依赖项。但我无法通过 CMakeLists.txt 将 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()

我没有修改 findG2O.cmake,因为它在 https://github.com/RainerKuemmerle/g2o/blob/master/cmake_modules/FindG2O.cmake 中。

我应该更改 findG2O.cmake 吗?我真的不明白发生了什么。我应该如何着手构建源代码和链接?

我在 StackOverflow 上的任何地方都没有找到我的问题的准确答案,但也许我只是不知道我在寻找什么。

错误信息是:
/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}

关于c++ - 如何在 C++ 中克隆、构建和链接 g2o 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58680427/

相关文章:

c++ - C++程序打印到哪里?

c++ - 紧凑、可读、高效的 C++ 算法,用于反转字符串中的单词 IN-PLACE

c++ - 通过 ShellExecuteInfo 提升进程 - 无限壳?

java - 在另一个模块中使用自定义 gradle 插件模块

java - 安卓 Ant 构建

gcc - 库构建中的静态 -libgfortran

c++ - 非唯一 namespace 限定查找的代码示例

c++ - 介子创建不会编译的构建文件

c++ - 如何静态链接Qt库?

c++ - 对象构造函数的静态库 "Undefined Reference"