g ++, связывающий демо OpenCV, не находит cv :: _ InputArray :: _ InputArray и cv :: imshow - PullRequest
0 голосов
/ 19 февраля 2019

На одном ПК я пытаюсь скомпилировать следующую демонстрационную программу 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.

Что меня удивляет У меня есть второй компьютер с теми же установками GCC и OpenCV, где компиляция и компоновка выполняются успешно. Кто-нибудь знает, в чем может быть разница, чтобы компоновка работала только на последнем?

1 Ответ

0 голосов
/ 22 февраля 2019

Решено: причина в том, что моя первая машина содержала устаревшую версию OpenCV в своем / usr / local tree.После удаления компиляция и компоновка работают нормально.

...