ios xcode opencv bitcode
[v2.4][v3.0]

Cómo compilar OpenCV iOS con ENABLE_BITCODE



xcode (2)

Cuando intenté compilar mi proyecto XCode con OpenCV 2.4 iOS usando XCode 7 + iOS SDK 9, XCode se quejó de que

ld: ''opencv2.framework / opencv2 (alloc.o)'' no contiene código de bits. Debe reconstruirlo con el código de bits habilitado (configuración de Xcode ENABLE_BITCODE), obtener una biblioteca actualizada del proveedor o deshabilitar el código de bits para este objetivo. para la arquitectura arm64

clang: error: el comando del vinculador falló con el código de salida 1 (use -v para ver la invocación)

y se negó a enlazar. Después de algunas búsquedas en Google, resulta que fue porque Apple agregó una nueva función llamada Bitcode para la optimización de la aplicación dentro de App Store. Si bien el binario OpenCV para iOS no se ha actualizado para incluir Bitcode, no puede pasar la etapa de enlace.

Algunas reference señalaron una solución temporal para deshabilitar ENABLE_BITCODE para que la vinculación se pudiera realizar sin Bitcode. Esto evitará que la aplicación se compile para Apple Watches porque Bitcode es obligatorio para las aplicaciones de Watch. Por lo tanto, mi pregunta es, ¿hay algunas formas (las mejores fáciles) de compilar iOS OpenCV con Bitcode habilitado? (mejor con un enlace de descarga para el framework compilado)


Después de algunas búsquedas y pruebas, encontré una manera de compilar OpenCV iOS desde la fuente con Bitcode. Aquí también se proporciona un binario compilado: [v3.0] [v2.4] . [Descargo de responsabilidad: No soy responsable de la integridad del binario compilado. Úselo bajo su propio riesgo.]

Los pasos de compilación son básicamente los mismos que el documento oficial , con solo un paso adicional.

  1. Descarga el código con git:

    cd ~/<my_working_directory>

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

  2. Haga un enlace simbólico para que Xcode permita que los scripts de compilación de OpenCV encuentren el compilador, los archivos de encabezado, etc.

    cd /

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

  3. [Paso clave] Cambie la secuencia de comandos de compilación para agregar la opción extra para Bitcode: editar ~/<my_working_directory>/opencv/platform/ios/build_framework.py , y localice la línea que contiene -DCMAKE_C_FLAGS . Añadir una bandera de -fembed-bitcode . Por ejemplo, en la fuente que tengo, es la línea 55, y se verá como

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

    despues del cambio [ref]

  4. Construir el marco de OpenCV:

    cd ~/<my_working_directory>

    python opencv/platforms/ios/build_framework.py ios

    Si todo está bien, unos minutos más tarde obtendrá ~/<my_working_directory>/ios/opencv2.framework . Puedes agregar este framework a tus proyectos de Xcode.

PD Haz una pregunta, incluso cuando ya sabes que la respuesta se recomienda de acuerdo con esta publicación en Meta Stackchange.


OpenCV es precisamente el tipo de software (junto con los códecs de audio y video) que probablemente tenga optimizaciones ARM NEON enrolladas a mano. La documentation sugiere que ~ 40 funciones han tenido este tratamiento en OpenCV3.0.

Si compila para el código de bits LLVM obtendrá las versiones genéricas (menos optimizadas, implementadas en C o C ++) en su lugar.

El uso de Bitcode es opcional, excepto cuando se compila para el reloj de Apple, donde es difícil imaginar que ejecutaría un procesamiento de imágenes complejo computacionalmente. Si está empaquetando una aplicación de vigilancia, anule la configuración de compilación para el código de bits solo en ella.