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

C++ 如何在C+中克隆、构建和链接g2o框架+;,c++,build,static-linking,g2o,C++,Build,Static Linking,G2o,我想在Ubuntu18.04上的C++11项目中使用g2o库,但我无法使构建工作正常。我有所有的依赖项。但我无法通过CMakeLists.txt将g2o库链接到我的项目 我是C++依赖的新手。< /P> 我已经尝试过克隆存储库并使用cmake构建它 结构如下: MY_PROJECT |__ cmake_modules |__ project_src |__ CMakeLists.txt |__ Thirdparty |____ g2o |____ bin |_

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

我是C++依赖的新手。< /P> 我已经尝试过克隆存储库并使用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_模块添加到我的_项目的CMakeLists.txt中 然后尝试使用find_包查找,但未找到

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.c保持原样

我应该更改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 ..
 make install
在文件夹中

MY_PROJECT/Thirdparty/g2o/build
MY_PROJECT/Thirdparty/g2o/build/g2o
/home/user/include/g2o
,此文件包含一些信息,如您尝试使用的浮点或库的类型。我认为这些信息将用于自动修改某些代码块

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

MY_PROJECT/Thirdparty/g2o/build
MY_PROJECT/Thirdparty/g2o/build/g2o
/home/user/include/g2o
或者也可以使用该命令

 cmake ..
 make install
将此文件复制到安装路径

如果${CMAKE\u PREFIX\u INTALL}是/home/user/,则文件config.h的位置在文件夹中

MY_PROJECT/Thirdparty/g2o/build
MY_PROJECT/Thirdparty/g2o/build/g2o
/home/user/include/g2o
如果您想使用find_包查找g2o库,那么您需要编写

set (G2O_ROOT  /home/user)
在find_包之前

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

include_directories(${G2O_INCLUDE_DIR}

您尝试时的错误消息是什么?
/home/miki/ORB\u SLAM2/Thirdparty/g2o/g2o/types/sim3/types\u seven\u dof\u expmap.h:29:10:致命错误:g2o/config.h:没有这样的文件或目录#包括“g2o/config.h”
g2o/config.h在g2o/build/g2o/config.h中。g2o类头不能包括自己的配置,一定很糟糕,对吗?