У меня ошибка компоновщика при попытке создать код, который использует преимущества некоторых библиотек 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
Любая помощь будет принята с благодарностью! Пожалуйста, дайте мне знать, если я могу предоставить что-нибудь еще, что могло бы помочь.
Обычная причина этого заключается в том, что динамическая библиотека, с которой вы пытаетесь связать, не установлена или не является символической ссылкой в каталог, который ищет компоновщик.
Это может быть вызвано двумя проблемами.
Во-первых, вы можете давать компоновщику неполную команду, когда пытаетесь создать исполняемый файл. Или, во-вторых, вы, возможно, получили плохую установку от 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
без проблем, как я был.