在一台PC上,我尝试编译以下演示程序opencv2.cpp
,该程序从默认视频捕获设备中获取图像以显示它们:
#include "opencv2/opencv.hpp"
using namespace cv;
int main ( const int argc, const char * const * const argv ) {
VideoCapture cap( 0 );
if( ! cap.isOpened() ) return 1;
Mat frame;
for ( ; ; ) {
cap >> frame;
if ( frame.empty() ) break;
imshow( "frame", frame );
if ( waitKey( 10 ) == 27 ) break;
}
return 0;
}
汇编以命令开始:
g++ "opencv2.cpp" -o "opencv2" -lopencv_core -lopencv_highgui -lopencv_videoio
链接失败与链接器错误:
/tmp/ccaEqcJr.o: In function `main':
opencv2.cpp:(.text+0x93): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
opencv2.cpp:(.text+0xc7): undefined reference to `cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)'
collect2: error: ld returned 1 exit status
Linux系统使用GCC 8.2.1和OpenCV 3.4.1。
运行让我感到困惑的是,我有第二台PC具有相同的GCC和OpenCV的安装,其中编译和链接成功了。有人知道任何人都有线索,以便链接起作用,以便链接起作用。仅在后者?
已解决:原因是我的第一台计算机在其/usr/local树中包含OpenCV的过时版本。删除此之后,汇编和链接工作正常。