Compile la biblioteca opencv adecuada para NDK18 y superior en el entorno Windows

prefacio

    Debido a que NDK canceló la compatibilidad con GUN después de actualizar la versión 18, también se eliminó gnustl (consulte https://github.com/android-ndk/ndk/wiki/Changelog-r18 ) y la versión de Android de opencv usa Compilado por gunstl (usted Puede ir a android.toolchain.cmake en plataformas\android en la carpeta del código fuente), por lo que después de actualizar el NDK, si compila directamente el proyecto original, algunas funciones solo se declararán pero no se implementarán. Muchas personas han optado por degradar la versión NDK, pero el trastorno obsesivo-compulsivo significa que no pueden soportar usar la última versión y actualizarla con decisión.

    Lo hice en Windows 10 y lo compilé con el código fuente opencv3.4.2 (la versión más "cómoda"). No he probado otras versiones todavía. Debería ser similar. Puedo inferir otros casos de una instancia, supongo. .

    Después de la actualización del NDK, solo queda un compilador clang/clang++, solo necesitamos usarlo para recompilar el código fuente de opencv.

referencias:

Compile el blog de opencv4android + opencv_contrib_Xiao19950820 en Windows-blog de CSDN

Problemas de actualización de Android NDK 18 OPENCV_blog CSDN de columna de fff2666

Cero, obstáculos encontrados

    Intenté usar NDK19 para compilar opencv3.4.2 y se informará un error cuando la compilación alcance el 100%, pero el mismo método no es un problema para usar NDK17 para compilar y la biblioteca compilada no informará un error cuando se use. bajo NDK19. No sé si la versión 3.4.2 no es compatible con un NDK tan nuevo. Después de actualizar la biblioteca, si el proyecto original de Android no se puede compilar, límpielo y luego vuelva a vincular la parte de C++.

    Además la biblioteca compilada con clang es muy grande, no sé por qué, originalmente era de unos 10 MB, pero esta es de 100 MB. Hice una demostración simple y descubrí que el tamaño de la biblioteca no afecta el tamaño de la APLICACIÓN, así que lo dejé así por el momento.

    Luego, para la versión 3.4, no se pudieron encontrar algunos archivos, pero este problema no se encontró al compilar 4.1.0 en sí, es la versión CXX, lo cual es sorprendente.

1. Configuración del entorno

    Este paso es similar al contenido de este artículo sobre la compilación del blog-CSDN de opencv4android + opencv_contrib_Xiao19950820 en Windows , por lo que no entraré en detalles aquí (soy demasiado vago para instalar el entorno nuevamente). En general, necesitamos instalar cmake, mingw, ant y configurar variables de entorno.

    También hay Python y LLVM. Como tengo estas dos cosas instaladas aquí, no estoy seguro de si son necesarias. Puedes ir al sitio web oficial para descargar estos dos:

    Descargar Python | Python.org

    Página de descarga de LLVM

    LLVM puede elegir la versión correspondiente de los binarios preconstruidos. Tendrán la configuración de agregar variables de entorno durante la instalación. Yo elegí agregar.

2. Descarga del código fuente

    Hay muchas formas de descargar el código fuente, fui directamente a github para descargarlo: https://github.com/opencv

       

    Tenga en cuenta que intente no descargar la versión maestra, elija la versión que necesitamos descargar.

    

    Si necesita la biblioteca contrib, debe descargar la misma versión que la biblioteca opencv; de lo contrario, la compilación informará un error ~

    Después de descargarlo, descomprímelo y listo.

    

    Aquí está mi estructura de carpetas.

3. compilar

    Vale la pena señalar que la versión 3.4.2 solo es compatible con la versión 25.2.5 de Android SDK Tools. Debe descargarlo usted mismo ( https://dl.google.com/android/repository/tools_r25.2.5-windows.zip ). No sé si otras versiones de OpenCV tienen este problema. Después de la descarga, simplemente reemplace la carpeta de herramientas en el directorio SDK (elimine primero la original y haga una copia de seguridad si no está seguro).

    Primero, abra cmake-gui, la interfaz gráfica es mucho más fácil de operar (creo que sí).

    

    En la figura 1, complete la ruta para almacenar el código fuente de opencv y en la figura 2, complete la ruta de almacenamiento del resultado generado.

    Luego haga clic en "agregar entrada" para agregar algunas banderas.

    Por cierto, qué bits de bandera agregar están determinados por la cadena de herramientas utilizada. La mayoría de los tutoriales nos permitirán usar la cadena de herramientas en el código fuente opencv. Si este es el caso, no se adaptará al último NDK. Entonces aquí tenemos que optar por usar la cadena de herramientas que viene con el NDK. La cadena de herramientas se encuentra en ndk-bundle\build\cmake\android.toolchain.cmake.

    Lo que hay que agregar es ANDROID_ABI, esto agrega la ABI que necesitas según tus necesidades.

    

    Luego está ANDROID_STL, debido a que gunstl ya no es compatible, puedes usar c++_shared o c++_static aquí.

    

PD: si le indica que no hay una ruta del SDK de Android después de Configurar, agregue otro ANDROID_HOME, el valor es la ruta del SDK, como por ejemplo: C:\software\Android_SDK

Después de agregar, haga clic en el botón "Configurar", seleccione mingw como herramienta de generación, luego seleccione compilación cruzada usando la cadena de herramientas y haga clic en "Siguiente".

    

    Después de eso, aparecerá la cadena de herramientas de selección, aquí elegimos la cadena de herramientas que viene con el NDK, que es /build/cmake/android.toolchain.cmake en el directorio del NDK. Si está utilizando el SDK instalado por Android Studio, el directorio NDK es el paquete ndk en el directorio SDK y no estoy seguro de los demás. Luego haga clic en Finalizar.

    Se puede encontrar que cmake ha seleccionado automáticamente el compilador como clang

    

PD: Si encuentra el siguiente error:

SDK de Android: no se pueden crear proyectos de Android según lo solicitado por la variable BUILD_ANDROID_PROJECTS=ON.

El error completo es el siguiente:

CMake Error at cmake/android/OpenCVDetectAndroidSDK.cmake:184 (message):
  Android SDK: Can't build Android projects as requested by
  BUILD_ANDROID_PROJECTS=ON variable.

  Use BUILD_ANDROID_PROJECTS=OFF to prepare Android project files without
  building them
Call Stack (most recent call first):
  CMakeLists.txt:657 (include)

Simplemente busque BUILD_ANDROID_PROJECTS en la columna de búsqueda y luego elimine el gancho, o elimine los ganchos de BUILD_JAVA y BUILD_ANDROID_EXAMPLES.

    Seleccione la opción que necesita más adelante y luego haga clic en "Configurar", hasta que no haya ninguna opción con fondo rojo, haga clic en "Generar".

    

    Finalmente, ingrese la herramienta de línea de comando CMD e ingrese la dirección completada en el cuadro rojo 2 en la primera imagen de la tercera sección.

    cd (espacio) (la dirección completada en el cuadro rojo 2 de la primera imagen en la tercera sección)

    ps: si la dirección no está en la unidad c, primero debe usar la letra de la unidad para ingresar la unidad correspondiente. Por ejemplo, la mía está en la unidad d, primero ingrese d: y presione Entrar, y luego use cd.

    Utilice el comando mingw32-make para generar, este proceso lleva mucho tiempo.

    

Si ocurre el siguiente error, la versión de NDK puede ser demasiado alta, simplemente baje la versión de NDK.

bionic/libc/include/bits/fortify/stdio.h:76: error: undefined reference to '__vsnprintf_chk'
bionic/libc/include/bits/fortify/unistd.h:159: error: undefined reference to '__read_chk'
bionic/libc/include/bits/fortify/unistd.h:174: error: undefined reference to '__write_chk'
bionic/libc/include/bits/fortify/unistd.h:174: error: undefined reference to '__write_chk'

    Luego use el comando mingw32-make install para instalarlo.

    El resultado está en la carpeta install/sdk/native bajo esta ruta, incluidos los archivos de encabezado y los archivos de biblioteca.

En este punto, el trabajo de compilación está completo.

Esta es la primera vez que escribo un artículo, así que pido disculpas por la mala organización lingüística. Si encuentra algún problema, bienvenido a consultar.

    

Supongo que te gusta

Origin blog.csdn.net/qq_19313495/article/details/89709405
Recomendado
Clasificación