Как клонировать, создавать и связывать фреймворк 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? Я не очень понимаю, что происходит. Как мне продолжить построение исходного кода и создание ссылок?
Я не нашел точного ответа на свою проблему в Stackru, но, возможно, я просто не знал, что искал.
Сообщение об ошибке было:
/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?
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}