Как клонировать, создавать и связывать фреймворк g2o на C++

Я хочу использовать библиотеку g2o в своем проекте C++11 в Ubuntu 18.04, но не могу заставить работать сборку. У меня есть все зависимости. Но я не могу связать библиотеку g2o со своим проектом через CMakeLists.txt

Я новичок в зависимостях 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

Я добавил cmake_modules изнутри g2o в CMakeLists.txt my_project, а затем попытался найти его с помощью 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, чтобы мне не приходилось менять все включения в сторонней библиотеке?


person Mikuláš Bankovič    schedule 03.11.2019    source источник
comment
Какое сообщение об ошибке было при попытке?   -  person Alan Birtles    schedule 03.11.2019
comment
g2o/config.h находится в g2o/build/g2o/config.h после того, как заголовок класса сборки g2o не может включать свою собственную конфигурацию, это должно быть плохое связывание, я прав?   -  person Mikuláš Bankovič    schedule 03.11.2019


Ответы (1)


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

А если вы хотите найти библиотеки g2o с помощью find_package, то вам нужно написать

set (G2O_ROOT  /home/user)

перед find_package.

Наконец, добавьте путь к заголовку в CMakeLists.txt, например

include_directories(${G2O_INCLUDE_DIR}
person jyli    schedule 24.08.2020