2015-09-22 2 views
16

Когда я попытался скомпилировать мой XCode проект с OpenCV 2.4 IOS с помощью XCode 7 + IOS SDK 9, XCode жаловался, чтоКак скомпилировать OpenCV IOS с ENABLE_BITCODE

ld: 'opencv2.framework/opencv2(alloc.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

и отказался связать. После некоторого googling это turns out, потому что Apple добавила новую функцию с именем Bitcode для оптимизации приложений в App Store. Хотя двоичный файл OpenCV iOS не был обновлен, чтобы включить Bitcode, он не может пройти этап ссылки.

reference указал временное решение для отключения ENABLE_BITCODE, поэтому связь может быть выполнена без битового кода. Это предотвратит компиляцию приложения для Apple Watches, потому что биткод является обязательным для приложений Watch. Поэтому мой вопрос: есть ли некоторые (наиболее простые) способы скомпилировать iOS OpenCV с включенным битовым кодом? (лучше с ссылкой для загрузки для скомпилированной фреймворка)

ответ

18

После некоторого поиска и пробной версии я выяснил способ скомпилировать OpenCV iOS из источника с помощью Bitcode. Скомпилированный двоичный файл также приводится здесь: [v3.0][v2.4]. [Отказ от ответственности: я не несу ответственности за целостность скомпилированного двоичного файла. Используйте на свой страх и риск.]

Этапы компиляции в основном такие же, как и official document, и только один дополнительный шаг.

  1. Скачать код с мерзавцем:

    cd ~/<my_working_directory>

    git clone https://github.com/Itseez/opencv.git

  2. Сделать символическую ссылку для Xcode, чтобы OpenCV строить сценарии найти компилятор, файлы заголовков и т.д.

    cd /

    sudo ln -s /Applications/Xcode.app/Contents/Developer Developer

  3. [Key Step] Изменение компиляции сценария, чтобы добавить дополнительные опции для битового кода: редактировать ~/<my_working_directory>/opencv/platform/ios/build_framework.py и найдите строку, содержащую -DCMAKE_C_FLAGS. Добавьте флаг -fembed-bitcode. Так, например, в источнике я получил, это линия 55, и будет выглядеть

    "-DCMAKE_C_FLAGS=\"-Wno-implicit-function-declaration -fembed-bitcode\" " +

    после изменения. [ref]

  4. Сложение рамки OpenCV:

    cd ~/<my_working_directory>

    python opencv/platforms/ios/build_framework.py ios

    Если все в порядке, через несколько минут вы получите ~/<my_working_directory>/ios/opencv2.framework. Вы можете добавить эту инфраструктуру в свои проекты Xcode.

P.S. Задайте вопрос, даже если вы уже знаете, что ответ рекомендуется в соответствии с this post на Meta Stackchange.

+2

Я обнаружил, что новая версия opencv (версия 3.1) уже имеет флаг -fembed-bitcode в файле build_framwork.py – CSawy

+0

@CSstudent Спасибо за головы! – grapeot

+0

@grapeot Я выполнил те же шаги, но столкнулся с проблемами в качестве шага 4. Помогите мне. Я могу показать вам журналы, но они превышают лимит символов. Так что не могу писать. –

7

OpenCV - это именно то программное обеспечение (наряду с аудио и видео кодеками), которое, вероятно, будет иметь ручные ARM NEON-оптимизации. documentation предполагает, что ~ 40 функций имели это лечение в OpenCV3.0.

Если вы компилируете для бит-кода LLVM, вы получите вместо этого общие (менее оптимизированные, реализованные на C или C++) версии.

Использование Биткода является необязательным - за исключением случаев компиляции для часов Apple, где трудно представить, что вы все равно выполняли бы сложную обработку изображений на основе вычислений. Если вы подключаете приложение для часов, переопределите только параметр сборки для битового кода.

Смежные вопросы