Подтвердить что ты не робот

OpenCV.Framework не компилируется для архитектуры armv7s

Я работаю над приложением iphone с использованием инфраструктуры openCV. Все работает нормально. однако в последнее время с выпуском iOS 6 и XCode 4.5 я переносил свой проект на XCode 4.5 При создании я столкнулся с этой ошибкой:

ld: файл является универсальным (2 среза), но не содержит (n) armv7s кусочек: /Users/jobs/iPhone _Client/workspace/MyProject/third-party/OpenCV.framework/OpenCV для архитектуры armv7s clang: ошибка: команда компоновщика не удалась с выходом код 1 (используйте -v, чтобы увидеть вызов)

** BUILD FAILED **

Не удалось выполнить следующие команды сборки:             Ld build/MyProject.build/Debug-iphoneos/MyProject.build/Objects-normal/armv7s/MyProject нормальный armv7s (1 отказ)

Как я понял, это связано с новой архитектурой armv7s. OpenCV, по-видимому, не компилируется с armv7s.

Как я могу исправить эту проблему?

Где я могу найти новую версию фреймворка, совместимую с архитектурой armv7s?

И если не существует совместимой среды, есть ли способ получить исходный код и создать мою собственную библиотеку, собранную против новой архитектуры? Может быть, некоторые быстрые шаги, как это сделать?

Примечание: Просто отметим, что мне нужна сборка для armv7s не armv7. Спасибо вам

4b9b3361

Ответ 1

Этот ответ основывается на том, что дано n9986. Как он предложил, я клонировал репозиторий, найденный в

https://github.com/jonmarimba/OpenCV-iOS

Когда я загрузил его, несколько ссылок внутри проекта на разные библиотеки были разбиты, что было странно, но их было легко исправить. После их исправления он вел себя точно так же, как описано в n9986, выводя библиотеки, скомпилированные как для armv7, так и для armv7. Для моих целей, однако, я требовал, чтобы они были связаны в .framework, чтобы они могли быть заменой старой .framework, которую я использовал.

Раньше я загрузил последнюю версию Opencv для ios здесь и потратил немало времени, пытаясь изменить свои файлы cmake для компиляции с поддержкой armv7. jonmarimba уже реструктурировал файл проекта xcode, чтобы убрать свои зависимости от cmake, что делает изменение целевой архитектуры более интуитивно понятным. К сожалению, он не создает столько библиотек, сколько поставляется со стандартной конструкцией openCV. Я добавил новую цель для проекта jonmarimba для opencv_world, который является целью, используемой в стандартной версии openCV для преобразования в структуру. Как только это было построено, я использовал его как замену статической библиотеке в файловой структуре фреймворка, сгенерированной стандартной версией openCV.

Созданная среда может быть загружена здесь. Он отлично работает для меня, как для замены предыдущей opencv2.framework. Однако я заметил, что jonmarimba не преобразовал цели для opencv_videostab, opencv_stitching или opencv_nonfree. Возможно, если вы используете одну из этих библиотек, моя инфраструктура не будет работать для вас. Если это так, дайте мне знать, и я могу попытаться установить их в качестве целей в проекте xcode для вас.

Обновление

Чтобы скомпилировать другие архитектуры, измените целевую архитектуру в включенном проекте xcode на то, что вам нравится в библиотеке opencv_world. После того, как вы его построите, найдите библиотеку, которую вы только что создали. Переименуйте библиотеку opencv_world в opencv2 и замените файл библиотеки, найденный в .framework, opencv_world.

Update2

OpenCV 2.4.3 теперь компилируется с поддержкой armv7s по умолчанию, поэтому эти решения устарели.

Ответ 2

Клонировать проект Xcode для opencv и обновить подмодуль opencv git в соответствии с README:

https://github.com/jonmarimba/OpenCV-iOS

Проверьте настройки сборки, убедитесь, что присутствуют iOS6 и armv7. Нажмите "Создать". Теперь вы должны иметь совместимые с armv7 файлы .a. Я просто попробовал это:

$ file libopencv_core.a 
libopencv_core.a: Mach-O universal binary with 2 architectures
libopencv_core.a (for architecture armv7):  current ar archive random library
libopencv_core.a (for architecture cputype (12) cpusubtype (11)):   current ar archive random library

Последняя запись для armv7s согласно моим исследованиям до сих пор.

Изменить: последняя запись действительно является armv7s. Я запустил собственную команду справки lipo Xcode:

$ xcrun -sdk iphoneos lipo -info libopencv_core.a 
Architectures in the fat file: libopencv_core.a are: armv7 armv7s 

Ответ 3

Вы всегда можете просто не нацеливать armv7s и только нацеливать armv7. Ваше приложение все равно будет работать отлично на iPhone 5, оно просто не будет полностью оптимизировано для нового набора команд.

Ответ 4

Просто я клонировал источник из здесь и построил с этот учебник.

Затем я получил opencv2.framewok, который работает с armv7, armv7s и симулятором.

Ответ 5

Указав очевидное, вам нужно будет перекомпилировать и перестроить библиотеку openCV.framework и настроить ее для armv7s.

Откорректируйте "параметры проекта" библиотеки и "целевые настройки" перед перестройкой. удачи!

Ответ 6

Возможно, его можно построить с помощью CMake. У меня был год назад проблема с медицинской библиотекой, которую я хотел построить для iOS. Я мог бы обработать это с помощью CMake.

Возможно, эта ссылка может быть стартером.

http://computer-vision-talks.com/2010/12/building-opencv-for-ios/

Удачи!

Ответ 7

Pass -DCMAKE_OSX_ARCHITECTURES="armv6;armv7;armv7s;i386" для cmake при компиляции библиотеки/рамки OpenCV для iOS.