g ++链接OpenCV演示找不到cv :: _ InputArray :: _ InputArray和cv :: imshow

时间:2019-02-19 07:43:05

标签: opencv g++

在一台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完全相同的安装,可以成功进行编译和链接。是否有人知道可能会有什么不同,以便链接有效仅在后者上?

1 个答案:

答案 0 :(得分:0)

已解决:原因是我的第一台计算机在/ usr / local树中包含OpenCV的过时版本。删除之后,编译和链接就可以了。