首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C++中克隆、构建和链接g2o框架

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

Stack Overflow用户
提问于 2019-11-03 21:06:15
回答 1查看 1.1K关注 0票数 1

我想在我的Ubuntu18.04上的C++11项目中使用g2o库,但我无法使构建工作。我有所有的依赖项。但是我无法通过CMakeLists.txt将g2o库链接到我的项目

我是C++依赖方面的新手。

我已经尝试过克隆https://github.com/RainerKuemmerle/g2o存储库并使用cmake构建它。

结构如下:

代码语言:javascript
运行
复制
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查找它,但没有找到。

代码语言:javascript
运行
复制
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吗?我真的不明白发生了什么。我应该如何继续从源代码中构建和链接?

我还没有在StackOverflow上找到我的问题的确切答案,但也许我只是不知道我在搜索什么。

错误消息为:

代码语言:javascript
运行
复制
/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中解决它,这样我就不必更改ThirdParty库中的所有包含?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-24 22:17:42

config.h是在执行命令后生成的

代码语言:javascript
运行
复制
 cmake ..

在文件夹中

代码语言:javascript
运行
复制
MY_PROJECT/Thirdparty/g2o/build

,并且这个文件包含一些信息,比如您尝试使用的浮点数或库的类型。我认为这些信息将被用来自动修改一些代码块。

默认情况下,文件config.h的位置在文件夹中

代码语言:javascript
运行
复制
MY_PROJECT/Thirdparty/g2o/build/g2o

或者您也可以使用以下命令

代码语言:javascript
运行
复制
 make install

将此文件复制到安装路径。

如果您的${CMAKE_PREFIX_INTALL}为/home/user/,则文件config.h的位置在文件夹中

代码语言:javascript
运行
复制
/home/user/include/g2o

如果您想使用find_package查找g2o库,那么您需要编写

代码语言:javascript
运行
复制
set (G2O_ROOT  /home/user)

在find_package之前。

最后,将头路径添加到CMakeLists.txt中,如

代码语言:javascript
运行
复制
include_directories(${G2O_INCLUDE_DIR}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58680427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档