使用 cmake 编译时未定义的引用
Undefined Reference when compiling with cmake
我正在使用OpenCV和cmake(我都是新手)进行一个项目,并不断获得对位于外部文件夹中的函数的未定义引用。
这是针对使用命令行界面的树莓派。我的 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 库中的函数调用。我不确定如何解决此问题?
项目.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 中。
我弄清楚了我的问题是什么。它不是使用 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
这样做之后,一切都编译并运行。
相关文章:
- 编译C++时未定义的引用
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 对 Scalar ::Scalar() 的未定义引用
- 已定义函数时出现 G++ "未定义的引用"错误
- 链接 cmake 时出现未定义的引用错误
- 对复制 CTOR 和 CTOR 的未定义引用
- 错误:未定义对'oboe::AudioStreamBuilder::openStream(oboe::AudioStream**)'的引用
- 右值引用未定义的行为
- 对"vtable for DigitalClock"的未定义引用 - 未定义对"DigitalClock::staticMetaObject"的引用 - Qt
- 函数类型到函数类型的引用:未定义的引用
- avcodec_alloc_context引用未定义,但ffmpeg链接顺序正确
- 从c++调用Fortran子程序,链接时引用未定义
- 枚举引用未定义,但位于包含的头文件中