Как решить проблему компиляции opencv 'undefined reference', когда pkg-config не решает ее? - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь запустить программу с открытым исходным кодом, которая использует, среди прочего, OpenCV.Сначала я столкнулся с undefined reference ошибками, которые изменились на

Пакет opencv не был найден в пути поиска pkg-config

ошибки, которые затем вернулись к undefined reference проблемам,Детали на заднем плане.Команда компиляции и сообщение об ошибке также включены.

  • My исходная ошибка был длинный список ошибок 'undefined reference'.Я не мог разрешить это, но заметил, на этом StackOverflow вопрос , что, если я попробую это на Ubuntu вместо Windows, я мог бы попытаться добавить pkg-config --cflags --libs opencv.
  • Тогда моя ошибка компиляции изменилась с undefined reference to ... на Package opencv was not found in the pkg-config search path и т. Д.
    • Принято решение ( Вопрос StackOverflow ), как представляется, для создания файла с именем opencv.pc, скопируйте его в /usr/local/lib/pkgconfig, чтобы включить его в некоторые строки, затем добавьте некоторые другие строки в bashrc.Однако когда я создал файл opencv.pc, он просто создал пустой текстовый файл с именем opencv.pc вместо действительного .pc файла.Кроме того, каталог /usr/local/lib/pkgconfig не существует на моем компьютере, хотя pkg-config определенно установлен.
  • Я не мог заставить это решение работать, поэтому я продолжал искать и думал, что, возможно, часть проблемы заключалась в том, что вместо установки OpenCV из терминала я скопировал егос моего компьютера Windows с USB-ключом.Поэтому я попытался установить его с помощью терминала, используя следующую строку: sudo apt-get install libopencv-dev.Теперь моя ошибка снова

    неопределенные ссылки

    , несмотря на тот факт, что у меня все еще есть pkg-config ... в команде компиляции.Обратите внимание, что не только OpenCV имеет неопределенные ссылки, но и файлы, относящиеся к программе с открытым исходным кодом, которую я пытаюсь запустить (это называется «PuRe», алгоритм отслеживания взгляда).

g++ -I /home/binny/Desktop/opencv/build/include/opencv2/imgcodecs -std=c++11 -I /home/binny/Desktop/example/ -I /home/binny/Desktop/opencv/build/include/ -I /home/binny/Desktop/winrt_x86_msvc2017/include/ -I /home/binny/Desktop/winrt_x86_msvc2017/include/QtCore /home/binny/Desktop/example/main.cpp `pkg-config --cflags --libs opencv


/tmp/ccLpYSrK.o: In function `main':
main.cpp:(.text+0x49): undefined reference to `cv::imread(cv::String const&, int)'
main.cpp:(.text+0x218): undefined reference to `PuRe::PuRe()'
main.cpp:(.text+0x238): undefined reference to `PuRe::run(cv::Mat const&, Pupil&)'
main.cpp:(.text+0x2cd): undefined reference to `cv::ellipse(cv::_InputOutputArray const&, cv::RotatedRect const&, cv::Scalar_<double> const&, int, int)'
main.cpp:(.text+0x322): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
main.cpp:(.text+0x35e): undefined reference to `PuRe::~PuRe()'
main.cpp:(.text+0x484): undefined reference to `PuRe::~PuRe()'
/tmp/ccLpYSrK.o: In function `cv::String::String(char const*)':
main.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x54): undefined reference to `cv::String::allocate(unsigned long)'
/tmp/ccLpYSrK.o: In function `cv::String::~String()':
main.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): undefined reference to `cv::String::deallocate()'
/tmp/ccLpYSrK.o: In function `cv::String::operator=(cv::String const&)':
main.cpp:(.text._ZN2cv6StringaSERKS0_[_ZN2cv6StringaSERKS0_]+0x28): undefined reference to `cv::String::deallocate()'
collect2: error: ld returned 1 exit status

1 Ответ

0 голосов
/ 08 мая 2019

Из вашей команды компиляции видно, что вы установили opencv в папку Desktop, а не в соответствующие системные папки.Это будет работать, но создает проблемы для автоматических инструментов, таких как pkg-config, которые ожидают найти свои файлы в определенных местах.

Может помочь, если вы установите переменную оболочки PKG_CONFIG_PATH для включения папки, содержащей ваш файл opencv.pc.

Вы можете проверить, что это будет работать, используя

pkg-config --cflags opencv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...