调用cv::cvtColor时遭遇OpenCV链接错误,求解决方法
解决cv::cvtColor的链接错误问题
这个问题我太熟悉了——你踩了CMake里一个很容易犯的错误:用add_definitions()来指定链接库完全不对!
错误原因解析
add_definitions()的作用是给编译器添加预处理器宏定义(比如-DDEBUG这种),根本不是用来告诉链接器要链接哪些库的。所以你写的那些-lopencv_xxx参数根本没被链接器识别到,自然找不到cv::cvtColor的符号(这个函数在opencv_imgproc库里面),就出现了undefined reference错误。
正确的CMakeLists写法
推荐用CMake官方推荐的find_package方式来处理OpenCV依赖,既跨平台又可靠:
cmake_minimum_required(VERSION 2.8) project(stereo_img) # 查找指定版本的OpenCV(对应你错误里的2.4版本) find_package(OpenCV 2.4 REQUIRED COMPONENTS core imgproc highgui nonfree objdetect features2d) # 生成可执行文件 add_executable(stereo_img stereo_img.cpp) # 将OpenCV库链接到你的目标程序 target_link_libraries(stereo_img ${OpenCV_LIBS})
如果你确实想手动指定库(不推荐,因为跨平台性差),也应该用target_link_libraries而不是add_definitions:
cmake_minimum_required(VERSION 2.8) project(stereo_img) add_executable(stereo_img stereo_img.cpp) # 直接把需要的库链接到目标 target_link_libraries(stereo_img opencv_core opencv_imgproc opencv_highgui opencv_nonfree opencv_objdetect opencv_features2d)
后续操作
修改完CMakeLists.txt后,记得删除之前的build目录(如果有的话),重新执行:
mkdir build && cd build cmake .. make
这样链接器就能正确找到opencv_imgproc库,解决你的链接错误了。
内容的提问来源于stack exchange,提问作者j35t3r
相关产品推荐
相关产品推荐

