我有一个使用opencv和cmake的项目,它构建了100%的罚款。
然后,我转到一个C ++源文件,其中包含这些行,以及其他非显着的行:
cv::imshow("Test", display);
cv::waitKey(0);
我只删除这两行。再试一次,我得到:
$ make
(...)
[ 77%] Linking CXX executable project_test
libproject.so: undefined reference to `cv::resize(cv::_InputArray const&, cv::_OutputArray const&, cv::Size_<int>, double, double, int)'
libproject.so: undefined reference to `cv::imread(cv::String const&, int)'
libproject.so: undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)'
collect2: error: ld returned 1 exit status
CMakeFiles/project_test.dir/build.make:226: recipe for target 'project_test' failed
make[2]: *** [project_test] Error 1
CMakeFiles/Makefile2:105: recipe for target 'CMakeFiles/project_test.dir/all' failed
make[1]: *** [CMakeFiles/project_test.dir/all] Error 2
Makefile:94: recipe for target 'all' failed
make: *** [all] Error 2
你知道任何会导致链接失败的小代码删除吗?
我尝试从头开始构建原始代码并且工作正常,我尝试从头开始删除两行代码来构建代码,并且再次以上述方式失败。
修改
最初,项目的主要CMakeLists.txt文件包含:
target_link_libraries(project opencv_core opencv_highgui)
现在我把它编辑成了这个:
target_link_libraries(project opencv_core opencv_imgproc opencv_highgui opencv_imgcodecs)
该项目再次建立。但是为什么它首先建立起来而没有明确地链接这些库? 为什么这两条线会解决这个问题?