Неопределенная ссылка при компиляции с помощью cmake - PullRequest
0 голосов
/ 16 апреля 2019

Я работаю над проектом, использующим OpenCV и cmake (оба из которых я новичок), и продолжаю получать неопределенную ссылку на функции, расположенные во внешних папках.

Это для Raspberry Pi, использующего интерфейс командной строки. Мой файл CMakeLists.txt выглядит так:

cmake_minimum_required(VERSION 3.1)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
project(projectName)
find_package(OpenCV REQUIRED)
add_executable(${PROJECT_NAME} project.cpp supportFile.c supportFile2.c)
target_link_libraries(projectName ${OpenCV_LIBS} wiringPi)

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

CMakeFiles/.dir/projectName.cpp.o: In function `main':
projectName.cpp:(.text+0x4c): undefined reference to `initializeBoard()'
projectName.cpp:(.text+0x98): undefined reference to `setRS485ServoPosition(unsigned short, unsigned short, unsigned short)'

Все неопределенные ссылки являются вызовами функций в файлах supportFile.c, supportFile2.c или wiringPi. Я не уверен, как решить эту проблему?

файл project.cpp:

#include "opencv2/highgui.hpp" 
#include "opencv2/opencv.hpp" 
#include "supportFile.h" 
#include "supportFile2.h" 

int main(int argc, char* argv[]) { 

initializeBoard(); brake = 0; speed = 70; usmAngle = 5; value = 4;
setRS485ServoPosition(USM,0,usmAngle); 
setRS485ServoPosition(CAMERASERVO,0,value); 
... 

InitializeBoard () находится в файле supportFile.h, а функции setRS485ServoPosition () - в файле supportFile2.h.

1 Ответ

0 голосов
/ 17 апреля 2019

Я понял, в чём была моя проблема. Это было не с cmake, а с supportFile.h и supportFile2.h. Я внес следующие изменения в оба файла:

// .h file #include and #define section

#ifdef __cplusplus
extern "C" {
#endif

extern // to all .h functions section

#ifdef __cplusplus
}
#endif

После этого все скомпилировалось и запустилось.

...