对于小白来说,在使用CMake编译工程时,经常会出现代码里某个函数未定义找不到的问题,出现Undefined function reference to XXX 的报错,如何解决这么问题呢?
1、原因分析:
出现Undefined reference to XXX问题,是因为你在程序代码中,没有添加函数库,就使用了该函数库中的函数。
比如说你想要用 OpenCV 读取一张图片,使用了里面的 imread 函数,但没有添加OpenCV的库文件,就会出现报错信息
2、解决办法
在工程的CMakeLists.txt文件中添加OpenCV函数库文件
2.1 首先要搜索OpenCV的“安装包”
find_package(OpenCV REQUIRED)
指令运行成功后会自动创建两个变量—— OpenCV_INCLUDE_DIRS 和 OpenCV_LIBS ,这里面存放的是OpenCV头文件(include)的地址和库文件(library)的地址
2.2 告诉工程OpenCV的头文件在哪里找
include_directories(${OpenCV_INCLUDE_DIRS})
OpenCV_INCLUDE_DIRS里放的是OpenCV众多头文件的地址, ${ } 在CMake中的作用是给变量取值,PS:IF语句比较特殊,后面跟的变量不用 ${ } 就能取值
2.3 告诉工程OpenCV的库文件在哪里找
target_link_libraries(工程名 ${OpenCV_LIBS})
——注意,这条指令放在add_executable(工程名 main.cpp)后面
OpenCV_LIBS是前面find_package自动生成的变量,里面存放OpenCV库文件的地址。
3、 成功示例