Как скомпилировать OpenCV iOS с ENABLE_BITCODE
Когда я попытался скомпилировать проект XCode с помощью OpenCV 2.4 iOS с помощью XCode 7 + iOS SDK 9, XCode жаловался, что
л.д.: 'Opencv2.framework/opencv2 (alloc.o)' не содержит битовый код. Вы должны перестроить его с включенным битовым кодом (Настройка Xcode ENABLE_BITCODE), получить обновленную библиотеку из поставщика или отключить бит-код для этой цели. для архитектуры arm64
clang: ошибка: сработала команда компоновщика с кодом выхода 1 (используйте -v, чтобы увидеть Вызов)
и отказался от ссылки. После некоторого googling это получается, потому что Apple добавила новую функцию с именем Bitcode для оптимизации приложений в App Store. Хотя двоичный файл OpenCV iOS не был обновлен, чтобы включить Bitcode, он не может пройти этап ссылки.
В некотором ссылке указано временное решение об отключении ENABLE_BITCODE
, поэтому связь может быть выполнена без битового кода. Это предотвратит компиляцию приложения для Apple Watches, потому что биткод является обязательным для приложений Watch. Поэтому мой вопрос: есть ли некоторые (наиболее простые) способы скомпилировать iOS OpenCV с включенным битовым кодом? (лучше с ссылкой для загрузки для скомпилированной структуры)
Ответы
Ответ 1
После некоторых поисков и пробных версий я выяснил способ скомпилировать OpenCV iOS из источника с помощью Bitcode. Здесь также приводится скомпилированный двоичный файл: [v3.0] [ v2.4]. [Отказ от ответственности: я не несу ответственности за целостность скомпилированного двоичного файла. Используйте на свой страх и риск.]
Этапы компиляции в основном совпадают с официальным документом с одним дополнительным шагом.
-
Загрузите код с помощью git:
cd ~/<my_working_directory>
git clone https://github.com/Itseez/opencv.git
-
Сделать символическую ссылку для Xcode, чтобы скрипты сборки OpenCV находили компилятор, файлы заголовков и т.д.
cd /
sudo ln -s /Applications/Xcode.app/Contents/Developer Developer
-
[Key Step] Измените компиляцию script, чтобы добавить дополнительную опцию для Bitcode: отредактируйте ~/<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]
-
Создайте инфраструктуру OpenCV:
cd ~/<my_working_directory>
python opencv/platforms/ios/build_framework.py ios
Если все в порядке, через несколько минут вы получите ~/<my_working_directory>/ios/opencv2.framework
. Вы можете добавить эту инфраструктуру в свои проекты Xcode.
P.S. Задайте вопрос, даже если вы уже знаете, что ответ рекомендуется в соответствии с этим сообщением на Meta Stackchange.
Ответ 2
OpenCV - это именно тот вид программного обеспечения (наряду с аудио и видео кодеками), который, вероятно, будет иметь ручные ARM NEON-оптимизации. Документация предполагает, что ~ 40 функций имели это лечение в OpenCV3.0.
При компиляции для битового кода LLVM вы получите вместо этого общие (менее оптимизированные, реализованные в C или С++) версии.
Использование Биткода является необязательным - за исключением случаев, когда компиляция для часов Apple, где трудно представить, что вы все равно выполняли бы сложную обработку изображений на основе вычислений. Если вы подключаете приложение для часов, переопределите только параметр сборки для битового кода.