Связывание программы OpenCV 2.3 в Mac OS X Lion: символы не найдены для архитектуры x86_64

У меня возникла проблема при попытке скомпилировать программу из этого руководства из официальной документации OpenCV 2.3. Я создал CMakeList.txt, как сказано в ссылке. Ну, это не сработало.

После хорошего поиска в Google и попытки исправить это, я добавил правильную библиотеку и включил папки в OpenCVConfig.make (в /opt/local/share/opencv здесь). Ну, это вывод, когда я пытаюсь это сделать:

$ cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/carlosagarie/dropbox/code/c++/opencv

$ make
Linking CXX executable teste
Undefined symbols for architecture x86_64:
  "cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:
      _main in teste.cc.o
  "cv::imshow(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)", referenced from:
      _main in teste.cc.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make[2]: *** [teste] Error 1
make[1]: *** [CMakeFiles/teste.dir/all] Error 2
make: *** [all] Error 2

Пытаясь выяснить, почему он сказал, что ld: символ(ы) не найден(ы) для архитектуры x86_64, я заглянул в папку с моими библиотеками (/opt/local/lib) и использовал команду файла:

libopencv_calib3d.2.2.0.dylib:    Mach-O 64-bit dynamically linked shared library x86_64

То же самое для всех других библиотек. Так что, думаю, проблема не в них. Но почему ld не работает с ними? Я действительно не знаю, что делать.

Код такой же, как в учебнике, представленном ранее. Мой файл CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
project( teste )
find_package( OpenCV REQUIRED )
add_executable( teste teste )
target_link_libraries( teste ${OpenCV_LIBS} )

Заранее спасибо!


person agarie    schedule 26.10.2011    source источник


Ответы (1)


Я заметил, что вы следуете руководству 2.3.x, но ошибка ссылки относится к 2.2.0. Какую версию вы используете?

Пробовали компилировать вручную?

Что-то вроде этого:

Предполагая, что OPENCV_ROOT установлено в место установки (например, /opt/local)

g++ -I$OPENCV_ROOT/include -L$OPENCV_ROOT/lib -lopencv_core2.2.0 -lopencv_calib3d2.2.0 -c test.cpp

Если это не сработает, пробовали ли вы запустить ldconfig от имени пользователя root? Находится ли место установки библиотек opencv в /etc/ld.so.conf (если нет, вам нужно сделать это сначала, прежде чем ldconfig сделает что-нибудь полезное)?

Отредактируйте свой ответ с обновлениями на эти вопросы. А с остальным постараюсь помочь.

EDIT:
Вы также можете попробовать добавить это в свой ~/.profile и увидеть, как это исправляет:

export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib

Пробовали ли вы следовать этому руководству, начиная с раздела 2, с XCode?

person mevatron    schedule 27.10.2011
comment
Пробовал компилировать с помощью g++ -I/include -L/opt/local/lib -lopencv_core -lopencv_highgui teste.cc -o teste И ошибка та же, Неопределенные символы для архитектуры x86_64. Я использую Mac, поэтому нет ни утилиты ldconfig, ни файла /etc/ld.so.conf. Я думаю о чистой переустановке - достаточно удалить все .dylibs и включаемый материал? Или есть какие-то другие файлы, о которых мне нужно позаботиться? Спасибо большое за вашу помощь. - person agarie; 28.10.2011