Ошибки компоновщика после обновления Xcode до 4.5.2 и OpenCV до 2.4.3
Мой проект работал нормально до сегодняшнего утра. Я использовал xcode 4.3 и более старую версию OpenCV (я не уверен насчет точной версии). OSX был уже 10.7.x, но не 10.7.5
Сегодня, после обновления OSX до 10.7.5, xcode до 4.5.2 и загрузки OpenCV 2.4.3, я получаю следующие ошибки компоновщика при попытке построить проект:
Неопределенные символы для архитектуры armv7:
"_OBJC_CLASS _ $ _ ALAssetsLibrary", на которую ссылаются из:
objc-class-ref в opencv2 (cap_ios_video_camera.o)
"cv:: FeatureDetector:: create (std:: string const &)", на который ссылаются из:
- [ImageAnalyzer определяет шарики:] в ImageAnalyzer.o
"cv:: FeatureDetector:: detect (cv:: Mat const &, std:: vector> &, cv:: Mat const &) const", на который ссылаются из:
- [ImageAnalyzer определяет шарики:] в ImageAnalyzer.o
ld: символ (ы) не найден для архитектуры armv7
clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова)
Чтобы использовать новый фреймворк opencv, я удалил ссылку на старую фреймворк и сослался на проект на официальную предварительно собранную opencv2.framework, загруженную отсюда.
Я также удалил ссылку на libz.dylib и вместо этого добавил ссылку на libC++. Dylib.
Последний шаг состоял в том, чтобы обновить файл префикса до новой структуры. Соответствующая часть в файле префикса теперь выглядит так:
#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif
Все это сузилось до этих 4 ошибок компоновщика, от которых я не могу избавиться. Я пытался использовать libstdC++. Dylib, но получаю еще больше ошибок. Я также попытался собрать OpenCV самостоятельно, как объяснено здесь, но я все еще получаю те же ошибки, что и встроенная среда.
Что я упустил? Что-нибудь еще нужно изменить в моем проекте?
ОБНОВИТЬ:
Как показано здесь, установка "Стандартной библиотеки C++" на "libC++ (стандартная библиотека LLVM C++ с поддержкой C++ 11" привела только к одной ошибке:
clang: ошибка: недопустимая цель развертывания для -stdlib=libC++ (требуется iOS 5.0 или более поздняя версия)
После изменения цели развертывания на iOS 5 мой проект снова запустился.
Означает ли это, что OpenCV 2.4.3 не работает на версиях iOS старше 5?
7 ответов
Поскольку я не могу получить ответ относительно версий (ни здесь, ни на сайте вопросов и ответов OpenCV), я собираюсь опубликовать это как ответ, так как это по крайней мере решило проблему. Это описано здесь.
В настройках сборки вашего проекта перейдите в раздел Apple LLVM компилятор 4.1-язык.
Там:
Установите для языка C++ диалект значение по умолчанию для компилятора
Установите C++ Standard Libray на libC++ (LLVM C++ стандартный libray с поддержкой C++ 11
После выполнения вышесказанного я перестал получать эти ошибки компоновщика, и вместо этого получил только одну ошибку, которая гласила, что поддерживается только iOS 5 и выше. Изменение цели развертывания до 5,0 в летнее время проекта добилось цели.
В заключение, я все еще не уверен, что это означает, относительно совместимости OpenCV 2.4.3 с версиями iOS старше 5 лет.
Шаги для компиляции и запуска C++ opencv 2.4.4 на mac os x lion 10.7.5 с помощью cmake 2.8.10 и xcode 4.6.1
Наличие правильных инструментов
- загрузите opencv-unix с http://sourceforge.net/projects/opencvlibrary/files/ и распакуйте его где угодно
- загрузите cmake .dmg с http://www.cmake.org/cmake/resources/software.html и установите его
- я предполагаю, что у вас есть xcode 4.6 на os x lion, который включает ios sdk 6.1
- перейдите в настройки xcode, чтобы загрузить и установить инструменты командной строки, чтобы у вас был g++ и т. д.
Используйте cmake для компиляции opencv
- перейти в извлеченную папку opencv
создать каталог сборки
mkdir build cd build cmake -D WITH_TBB=OFF -D BUILD_NEW_PYTHON_SUPPORT=OFF -D BUILD_FAT_JAVA_LIB=OFF -D BUILD_TBB=OFF -D BUILD_EXAMPLES=ON -D CMAKE_CXX_COMPILER=g++ CMAKE_CC_COMPILER=gcc -D CMAKE_OSX_ARCHITECTURES=x86_64 -D BUILD_opencv_java=OFF -G "Unix Makefiles" .. make -j8 sudo make install
из папки сборки перейдите в bin / и запустите один из тестов
./opencv_test_stitching
Создайте свой собственный проект C++ opencv xcode
- запустите xcode и создайте новый проект xcode
- выберите инструмент командной строки для типа проекта под OS X
- откройте настройки сборки вашего проекта
- в разделе "Архитектуры" установите для параметра "Архитектура" значение 64-битной Intel. также установите допустимые архитектуры в x86_64
- под опциями сборки, установите компилятор для C/C++ на компилятор по умолчанию
- в разделе "Пути поиска" установите "Пути поиска заголовка" в / usr / local / include
- также в разделе "Пути поиска" установите "Пути поиска библиотеки" в / usr / local / lib
- в Apple LLVM 4.2 - язык устанавливает стандартную библиотеку C++ на libstd++ (для OpenCV 2.4.6, Xcode 5, LLVM 5.0 и 10.8.5 установите для языкового диалекта и библиотеки std значение "Compiler Default" вместо "libstd++")
Добавьте скомпилированные библиотеки opencv в ваш проект
- перейдите на вкладку "Этапы сборки" рядом с вкладкой "Настройки сборки", в которой вы находились
- внутри Link Binary With Libraries, нажмите на знак + и выберите Добавить другое
- нажмите косую черту / на клавиатуре и введите / usr / local / lib
- нажмите Enter и выберите библиотеки, которые вы хотите использовать в своем проекте
- убедитесь, что вы всегда выбираете libopencv_core.2.4.4.dylib
- нажмите Enter, и вы увидите выбранные dylibs под вашим проектом
написать код
- сначала давайте организуем файлы, щелкните правой кнопкой мыши на значке вашего проекта и выберите New Group
- назовите новую группу opencv или что-то еще
- перетащите Dylibs и поместите их в эту группу
- открыть main.cpp
- скопируйте код из любого тестового примера, поставляемого с opencv, и вставьте его сюда
- убедитесь, что добавлены все необходимые библиотеки, например, если вы скопировали код opencv_test_stitching.cpp в main.cpp, вам потребуется добавить следующие библиотеки на предыдущих этапах libopencv_core.2.4.4.dylib libopencv_highgui.2.4.4.dylib libopencv_stitching.2.4.4.dylib
Приветствия.
Похоже, в вашем проекте отсутствует фреймворк AssetsLibrary.
Выберите верхний узел в навигаторе проекта. (Откроется страница проекта и целей с настройками сборки.)
Выберите цель.
Выберите Сводка.
Прокрутите вниз к Связанным фреймворкам и библиотекам.
Нажмите значок " Плюс" в конце таблицы и выберите AssetsLibrary.framework.
Нажмите Добавить.
Затем попробуйте построить его снова.
clang: error: неверная цель развертывания для -stdlib=libC++ (требуется iOS 5.0 или более поздняя версия), чтобы удалить эту ошибку.
Перейти к BuildSettings. Установите стандартную библиотеку C++ в компилятор по умолчанию. Ошибка обязательно будет удалена.
Просто чтобы получить это в сообщениях где-то на случай, если кто-то столкнется с тем же. Если вы будете следовать всем хорошим советам о настройке правильной библиотеки C++ для компоновки при создании приложения для iOS, НО все равно получите ошибки ссылок для неопределенных символов, убедитесь, что ваши файлы кода настроены на компиляцию как C++! То есть переименуйте ваши.m в.mm и.h в.hpp. Это мелочи...
- Go Xcode/General/ Связанные фреймворки и библиотеки
- Нажмите кнопку "+"
- Тип: AssetsLibrary
- Выберите "AssetsLibrary.framework" и импортируйте его
Готово
Удачи!
Вместо использования команд терминала, приведенных в руководстве по установке opencv на официальном сайте, используйте следующие команды для сборки opencv из терминала. Работал на меня.
CD OpenCV-2.3.1
mkdir build
сборка компакт-диска
cmake -G "Unix Makefiles" ..
делать
sudo make install