我想编译doppia,它将OpenCV作为依赖项。目前我使用的是OpenCV 2.4.9.1,这是Ubuntu 16.04的默认设置。除了对函数imwrite
的引用外,一切正常。
...
[100%] Linking CXX executable objects_detection
undefined reference to `cv::imwrite(std::string const&, cv::_InputArray const&, std::vector<int, std::allocator<int> > const&)'
collect2: error: ld returned 1 exit status
CMakeFiles/objects_detection.dir/build.make:103: recipe for target 'objects_detection' failed
make[2]: *** [objects_detection] Error 1
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/objects_detection.dir/all' failed
make[1]: *** [CMakeFiles/objects_detection.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
抛出错误的文件是IntegralChannelsDetector.cpp
。
其中包括opencv2/imgproc/imgproc.hpp
和opencv2/highgui/highgui.hpp
。
运行pkg-config opencv --cflags --libs
也会返回所有模块都正确链接。
研究我的错误我了解到,如果我使用OpenCV 3.x,我必须包含img_codecs
模块,但OpenCV 2.x不是这种情况。我担心出于兼容性原因我会被卡在2.x上。
还有什么东西可以尝试让链接过程完成吗?