Неопределенные символы для архитектуры x86_64, проблемы с компоновщиком в Yosemite с OpenCV

У меня ошибка компоновщика при попытке создать код, который использует преимущества некоторых библиотек opencv.
Сама ошибка:

Неопределенные символы для архитектуры x86_64:

«cv :: Exception :: Exception (int, std :: __ cxx11 :: basic_string, std :: allocator> const&, std :: __cxx11 :: basic_string, std :: allocator> const&, std :: __cxx11 :: basic_string, std :: allocator> const&, int)

ld: символы не найдены для архитектуры x86_64

Каковы общие причины этой ошибки?
Мой поиск показал, что у многих людей были проблемы с компиляцией opencv с неверными библиотеками или в i386 вместо x86_64. Я совершенно уверен, что у меня нет ни одной из этих проблем. Я установил opencv через homebrew с флагом —c ++ 11 (сборка с c ++ 11) и получил

/usr/local/Cellar/opencv/2.4.11_1/lib/libopencv_core.dylib: 64-разрядная динамически связанная общая библиотека Mach-O x86_64

когда я побежал:

файл /usr/local/Cellar/opencv/2.4.11_1/lib/libopencv_core.dylib

Любая помощь будет принята с благодарностью! Пожалуйста, дайте мне знать, если я могу предоставить что-нибудь еще, что могло бы помочь.

0

Решение

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

Это может быть вызвано двумя проблемами.

Во-первых, вы можете давать компоновщику неполную команду, когда пытаетесь создать исполняемый файл. Или, во-вторых, вы, возможно, получили плохую установку от homebrew.

К счастью для вас, это довольно легко управляется pkg-config который вы видите, требуется, если вы печатаете

brew info opencv

Это дает

...
==> Dependencies
Build: cmake ✘, pkg-config ✔
Required: jpeg ✔, libpng ✘, libtiff ✔
...

Заметив, что бутылка opencv от Homebrew использует pkg-config в своих зависимостях, вы можете использовать этот инструмент, чтобы получить флаги компоновщика для вас.

Примером сборки командной строки может быть

clang++ -std=c++11 -o opencv_app opencv_test.cpp $(pkg-config --cflags --libs opencv)

читать страницу man pkg-config и искать в ОПИСАНИЕ раздел, чтобы увидеть, где хранятся файлы .pc. Затем перейдите к этим файлам и протестируйте pkg-config команда, чтобы получить пути включения и компоновщика. Когда у вас все получится, вернитесь и попробуйте собрать с этими флагами, вставленными расширением $ (pkg-config …).

РЕДАКТИРОВАТЬ После написания этого поста я установил opencv через Homebrew, чтобы убедиться, что pkg-config совет будет работать. По умолчанию $PKG_CONFIG_PATH не включает каталог, в котором Homebrew хранит файлы * .pc, поэтому вам нужно сделать еще одну вещь. Тип
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig, Тогда вы должны быть
способен бежать pkg-config --cflags --libs opencv без проблем, как я был.

1

Другие решения


По вопросам рекламы [email protected]