Я пытаюсь запустить следующий код на MAC OS 10.10:dyld: Символ не найдено: __ZN2cv6imreadERKNSt3 при запуске простого кода на MAC OS 10,10
#include <cv.h>
#include <highgui.h>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("xxx.jpg");
imshow("image", img);
waitKey(0);
return 0;
}
Этот код может быть построен успешно. Но когда я запускаю его, я всегда получаю сообщение об ошибке:
dyld: lazy symbol binding failed: Symbol not found:
__ZN2cv6imreadERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEi
Referenced from:
/Users/Coldmoon/ComputerVisionApps/opencvTest/Build/Products/Debug/opencvTest
Expected in: /usr/local/lib/libopencv_highgui.2.4.dylib
У меня есть две разные версии opencv. Один из них построен с libstdc++
, другой - с libc++
. Оба являются opencv 2.4.9. Я хочу построить вышеуказанный код, используя libc++
opencv.
Так, в Xcode 6.1, я установил Header Search Path
и Library Search Path
, чтобы указать на libc++
OpenCV, который находится в /Users/Coldmoon/MyLibraries/opencv-2.4.9
и установить C++ Standard Library
к libc++
.
Мой вопрос: Кажется, что компилятор не связывает libc++
opencv, но libstdc++
opencv вместо этого находится в /usr/local/lib
.
Я полностью смущен. Есть что-то, что я пропустил?
Как вы говорите компоновщику, какую версию opencv использовать? Я имею в виду, у вас есть обе библиотеки в '/ Users/Coldmoon/MyLibraries/opencv-2.4.9' или только' libC++ 'one? Кроме того, 'libopencv_highgui.2.4.dylib' может иметь путь установки, равный'/usr/local/lib/libopencv_highgui.2.4.dylib', поэтому после того, как вы подключитесь к библиотеке в вашем доме, связанное приложение будет искать библиотеку в другая папка. В качестве первого шага попробуйте запустить приложение с помощью 'DYLD_LIBRARY_PATH =/Users/Coldmoon/MyLibraries/opencv-2.4.9'. – Paul
Спасибо большое! Это сработало! Я просто установил значение DYLD_LIBRARY_PATH' в переменные среды Xcode. Пусть 'DYLD_LIBRARY_PATH =/Пользователи/Coldmoon/MyLibraries/opencv-2.4.9/release/установлены/lib'. Но я все еще не понимаю причину. На мой взгляд, когда я говорю Xcode о позициях «пути поиска заголовка» и «пути поиска библиотеки» (укажите на libC++ opencv, который находится в '/ Users/Coldmoon/MyLibraries/opencv-2.4.9/release/установлен') информация достаточно ясна! Xcode должен знать, какую библиотеку связывать. Почему мне нужно сообщить Xcode значение 'DYLD_LIBRARY_PATH'? – coldmoon
Кстати, 'libstdC++ opencv' находится в'/usr/local/lib', который Xcode имеет тенденцию связывать первоначально. – coldmoon