Как включить библиотеки в cmake, который работает на g ++ или наоборот - PullRequest
0 голосов
/ 30 октября 2019

[решено] Я пишу код в Raspberry Pi, и у меня возникли проблемы с объединением кода, который использует библиотеки OpenCV и pigpio в c ++. У меня есть код, который использует OpenCV, который скомпилирован с CMake, и другой код, который использует pigpio, скомпилированный с g ++. Я не могу заставить библиотеку OpenCV работать с g ++, и я не могу понять, как добавить библиотеку pigpio в CMakeLists.

Я не знаю, возможно ли добавить -lpigpio в CMakeLists

g++ -Wall -pthread -o pigpio pigpio.cpp -lpigpio

Я попытался создать Findpigpio.cmake, скопировав этот https://github.com/joan2937/pigpio/blob/master/util/Findpigpio.cmake

идобавив его в /usr/share/cmake-3.6/Modules, затем создав CMakeLists.txt со следующим:


cmake_minimum_required(VERSION 3.1)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

project(pigpio1_project)

find_package(pigpio REQUIRED)


include_directories(${pigpio_INCLUDE_DIRS})


add_executable(pigpio1 pigpio1.cpp)

target_link_libraries(pigpio1 LINK_PRIVATE ${pigpio_LIBS})

, но при выполнении "cmake .. && make" он показывает мне следующую ошибку:

Scanning dependencies of target pigpio1
[ 50%] Building CXX object CMakeFiles/pigpio1.dir/pigpio1.cpp.o
[100%] Linking CXX executable pigpio1
CMakeFiles/pigpio1.dir/pigpio1.cpp.o: In function `main':
pigpio1.cpp:(.text+0x1c): undefined reference to `gpioInitialise'
pigpio1.cpp:(.text+0x64): undefined reference to `gpioServo'
pigpio1.cpp:(.text+0x70): undefined reference to `gpioServo'
pigpio1.cpp:(.text+0x84): undefined reference to `gpioServo'
pigpio1.cpp:(.text+0x90): undefined reference to `gpioServo'
collect2: error: ld returned 1 exit status
CMakeFiles/pigpio1.dir/build.make:94: recipe for target 'pigpio1' failed
make[2]: *** [pigpio1] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/pigpio1.dir/all' failed
make[1]: *** [CMakeFiles/pigpio1.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2


Я мог бы заставить его работать в Cmake (благодаря комментарию Цыварева) Я не использовал правильное имя переменной библиотеки pigpio.

1 Ответ

0 голосов
/ 30 октября 2019

Сначала я хочу уточнить одну вещь. CMAKE - это всего лишь инструмент для сборки, который будет использовать компилятор, такой как g ++ или clang, для компиляции вашего кода.

Возвращаясь к следующему вопросу. Вы должны быть в состоянии использовать Cmakelists, чтобы создать библиотеку pigpio и связать ее с вашим основным исполняемым кодом вместе с библиотекой opencv.

Примерно так:

add_library(PIGPIO SHARED pigpio.cpp)
target_link_libraries(PIGPIO pthread)

И теперь у вас есть библиотека PIGPIO, которую можно использовать для реального исполняемого файла вместе с библиотекой opencv, например:

add_executable(YOUR_MAIN src/yourmain.cpp)
target_link_libraries(YOUR_MAIN PIGPIO ${OpenCV_LIBS})
...