Проблема компиляции в OpenCV 2.3 - неопределенный рефлекс - Ubuntu 11.10 - PullRequest
38 голосов
/ 19 октября 2011

Информация о системе: Ubuntu 11.10 (64 бита) с OpenCV 2.3 (установлен сегодня)

Я пытаюсь скомпилировать очень простой код в OpenCV 2.3, но получаю странную ошибку.

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

int main(){
  cv::Mat image=cv::imread("img.jpg");
  cv::namedWindow("My Image");
  cv::imshow("My Image",image);
  cv::waitKey(0);
  return 1;
}

однако я получаю эти сообщения об ошибках ...

-SG41:~/Desktop$ g++ `pkg-config opencv --cflags --libs` -o test_1 test_1.cpp 
/tmp/ccCvS1ys.o: In function `main':
test_1.cpp:(.text+0x44): undefined reference to `cv::imread(std::basic_string<char,    std::char_traits<char>, std::allocator<char> > const&, int)'
test_1.cpp:(.text+0x8e): undefined reference to `cv::namedWindow(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
test_1.cpp:(.text+0xbc): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
test_1.cpp:(.text+0xf0): undefined reference to `cv::imshow(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)'
test_1.cpp:(.text+0x112): undefined reference to `cv::waitKey(int)'
/tmp/ccCvS1ys.o: In function `cv::Mat::~Mat()':
test_1.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39): undefined reference to `cv::fastFree(void*)'
/tmp/ccCvS1ys.o: In function `cv::Mat::release()':
test_1.cpp:(.text._ZN2cv3Mat7releaseEv[cv::Mat::release()]+0x47): undefined reference to `cv::Mat::deallocate()'
collect2: ld returned 1 exit status

Ответы [ 4 ]

73 голосов
/ 19 октября 2011

Я предполагаю, что по крайней мере некоторые из библиотек в выводе

pkg-config opencv --libs

являются архивными библиотеками.Неправильно размещать архивные библиотеки перед источниками, которые в них нуждаются (в данном случае test_1.cpp): порядок источников и библиотек в строке ссылок имеет значение .

Попробуйте

g++ -o test_1 test_1.cpp `pkg-config opencv --cflags --libs` 
2 голосов
/ 29 августа 2013

У меня была такая же проблема, но я обнаружил, что pkg-config opencv --cflags печатает "-I / usr / include / opencv" вместо "-I / usr / include / opencv2" ... Может бытьошибка пакета в Ubuntu?

0 голосов
/ 12 октября 2015

@ Ответ EmployedRussian работал и для меня. Для тех, кому интересно, как задать эту команду в Eclipse, используйте этот пост -

https://www.eclipse.org/forums/index.php?t=msg&goto=233377&

Вместо добавления gtk + используйте opencv; Вместо добавления новых флагов в 'Разные флаги компоновщика', добавьте новые флаги в конце после $ {INPUT} в - Проект-> Правой кнопкой мыши-> Свойства-> Сборка C / C ++ -> Настройки-> GCC C ++ linker-> Настройки эксперта: шаблон командной строки

0 голосов
/ 05 октября 2015

Я использую cmake и у меня были похожие проблемы.

Что-то странное происходит с файлами конфигурации cmake.

Для меня проблемы были решены простым установкой OPENCV_FOUND на TRUE и OpenCV_FOUND наTRUE.

Также мне пришлось установить OpenCV_DIR в /usr/local/share/OpenCV.

См. Также Ошибка CMake при настройке opencv

...