Ошибки компоновщика после обновления 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

Наличие правильных инструментов

  1. загрузите opencv-unix с http://sourceforge.net/projects/opencvlibrary/files/ и распакуйте его где угодно
  2. загрузите cmake .dmg с http://www.cmake.org/cmake/resources/software.html и установите его
  3. я предполагаю, что у вас есть xcode 4.6 на os x lion, который включает ios sdk 6.1
  4. перейдите в настройки xcode, чтобы загрузить и установить инструменты командной строки, чтобы у вас был g++ и т. д.

Используйте cmake для компиляции opencv

  1. перейти в извлеченную папку opencv
  2. создать каталог сборки

    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
    
  3. из папки сборки перейдите в bin / и запустите один из тестов

    ./opencv_test_stitching
    

Создайте свой собственный проект C++ opencv xcode

  1. запустите xcode и создайте новый проект xcode
  2. выберите инструмент командной строки для типа проекта под OS X
  3. откройте настройки сборки вашего проекта
  4. в разделе "Архитектуры" установите для параметра "Архитектура" значение 64-битной Intel. также установите допустимые архитектуры в x86_64
  5. под опциями сборки, установите компилятор для C/C++ на компилятор по умолчанию
  6. в разделе "Пути поиска" установите "Пути поиска заголовка" в / usr / local / include
  7. также в разделе "Пути поиска" установите "Пути поиска библиотеки" в / usr / local / lib
  8. в Apple LLVM 4.2 - язык устанавливает стандартную библиотеку C++ на libstd++ (для OpenCV 2.4.6, Xcode 5, LLVM 5.0 и 10.8.5 установите для языкового диалекта и библиотеки std значение "Compiler Default" вместо "libstd++")

Добавьте скомпилированные библиотеки opencv в ваш проект

  1. перейдите на вкладку "Этапы сборки" рядом с вкладкой "Настройки сборки", в которой вы находились
  2. внутри Link Binary With Libraries, нажмите на знак + и выберите Добавить другое
  3. нажмите косую черту / на клавиатуре и введите / usr / local / lib
  4. нажмите Enter и выберите библиотеки, которые вы хотите использовать в своем проекте
  5. убедитесь, что вы всегда выбираете libopencv_core.2.4.4.dylib
  6. нажмите Enter, и вы увидите выбранные dylibs под вашим проектом

написать код

  1. сначала давайте организуем файлы, щелкните правой кнопкой мыши на значке вашего проекта и выберите New Group
  2. назовите новую группу opencv или что-то еще
  3. перетащите Dylibs и поместите их в эту группу
  4. открыть main.cpp
  5. скопируйте код из любого тестового примера, поставляемого с opencv, и вставьте его сюда
  6. убедитесь, что добавлены все необходимые библиотеки, например, если вы скопировали код 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.

  1. Выберите верхний узел в навигаторе проекта. (Откроется страница проекта и целей с настройками сборки.)

  2. Выберите цель.

  3. Выберите Сводка.

  4. Прокрутите вниз к Связанным фреймворкам и библиотекам.

  5. Нажмите значок " Плюс" в конце таблицы и выберите AssetsLibrary.framework.

  6. Нажмите Добавить.

Затем попробуйте построить его снова.

clang: error: неверная цель развертывания для -stdlib=libC++ (требуется iOS 5.0 или более поздняя версия), чтобы удалить эту ошибку.

Перейти к BuildSettings. Установите стандартную библиотеку C++ в компилятор по умолчанию. Ошибка обязательно будет удалена.

Просто чтобы получить это в сообщениях где-то на случай, если кто-то столкнется с тем же. Если вы будете следовать всем хорошим советам о настройке правильной библиотеки C++ для компоновки при создании приложения для iOS, НО все равно получите ошибки ссылок для неопределенных символов, убедитесь, что ваши файлы кода настроены на компиляцию как C++! То есть переименуйте ваши.m в.mm и.h в.hpp. Это мелочи...

  1. Go Xcode/General/ Связанные фреймворки и библиотеки
  2. Нажмите кнопку "+"
  3. Тип: AssetsLibrary
  4. Выберите "AssetsLibrary.framework" и импортируйте его

Готово

Удачи!

Вместо использования команд терминала, приведенных в руководстве по установке opencv на официальном сайте, используйте следующие команды для сборки opencv из терминала. Работал на меня.

CD OpenCV-2.3.1

mkdir build

сборка компакт-диска

cmake -G "Unix Makefiles" ..

делать

sudo make install

Другие вопросы по тегам