Red de conocimiento informático - Material del sitio web - Cómo utilizar ndk para realizar una compilación cruzada de programas para otras plataformas en Windows

Cómo utilizar ndk para realizar una compilación cruzada de programas para otras plataformas en Windows

Objetivo: compilar la biblioteca .so de arm64

Método de compilación: en teoría, debería haber dos métodos para la compilación cruzada. Método 1. Instale la cadena de herramientas cruzadas en el servidor Linux y use la cruz directamente. -cadena de herramientas para compilar y vincular; Método 2, use ndk para completar la compilación cruzada, porque ndk ya ha instalado la cadena de herramientas de compilación cruzada, así como las bibliotecas del sistema y los archivos de encabezado del sistema relacionados. La diferencia entre estos dos métodos es que el archivo MAKE utilizado para la compilación en el servidor Linux y el archivo .mk

utilizado por ndk son significativamente diferentes. La razón es que ndk, como entorno de compilación integrado, ha formulado un conjunto específico de reglas para generar el script de compilación final.

La siguiente es una breve introducción sobre cómo usar ndk en Windows para realizar una compilación cruzada de la biblioteca .so para la plataforma de destino arm64:

Paso 1: busque el kit de desarrollo de ndk, que se puede obtener de la descarga oficial del sitio web o sitio web similar, es decir, el archivo android-ndk64-r10-windows-x86_64.rar

Paso 2: descomprima el paquete de herramientas ndk anterior y coloque el Carpeta testProject que contiene los archivos fuente del programa y los archivos de encabezado. Vaya al directorio de muestras en android-ndk-r10.

También es posible colocarlos en otro lugar, pero no es fácil agregar rutas relativas, etc., por lo que es más seguro compilar el código aquí, ya que todos los demás ejemplos están aquí.

Paso 3: Agregue una carpeta jni en testProject, ¡debe agregarse! ! ! ! ! !

paso 4: en la carpeta jni, agregue un archivo Android.mk, ¡debe agregarlo! ! ! ! !

paso 5: en la carpeta jni, agregue un archivo Application.mk junto con Android.mk, ¡debe agregarlo! ! ! ! !

paso 6: Android.mk y Application.mk juntos son similares al archivo de compilación makefile en el entorno Linux.

Cómo escribir Android.mk, puede consultar el ejemplo helllo-jni en la carpeta jni de Android.mk.

LOCAL_PATH:=$(call my-dir) #Debe escribirse

incluir $(CLEAR_VARS) #Debe escribirse

LOCAL_MODULE:=hello-jni #Compilar el nombre del módulo

LOCAL_SRC_FILES:=hello-jni.c #El nombre del archivo fuente compilado

incluir $(BUILD_SHARED_LIBRARY) #Ponlo al final

Además de las variables anteriores, hay otras variables especificadas,

LOCAL_CFLAGS, que se utilizan para especificar las opciones de compilación. Esto es exactamente lo mismo que en el archivo MAKE. opción -g, o puede especificar la macro de compilación y el valor de la macro

LOCAL_LDLIBS, que se usa para especificar la biblioteca dependiente para vincular, que es exactamente la misma que en el archivo MAKE. Puede usar -l nombre de la biblioteca para. especifique la biblioteca vinculada, o puede usar _L nombre de ruta para especificar la ruta de búsqueda de la biblioteca

LOCAL_STATIC_LIBRARIES, utilizado para especificar el nombre de la biblioteca estática que se vinculará, que no está disponible en el archivo MAKE

LOCAL_C_INCLUDES, utilizado para especificar la ruta del archivo de encabezado compilado, es diferente de la del archivo MAKE, no hay una ruta antes del Debe agregar -I. La ruta de escritura directa puede ser una ruta relativa o absoluta. ruta.

Separe varias rutas con espacios. Los problemas encontrados por mk incluyen:

(1) Siempre es incorrecto usar el archivo de encabezado de la biblioteca stl que el sistema carga automáticamente de forma predeterminada, y debe especificar manualmente LOCAL_STATIC_LIBRARIES en fuentes/cxx- stl/stlport/stlport para completar# includelt; stringgt; Esta carga del archivo de encabezado en formato C

(2) Utilice $(SYSROOT)/usr/include para completar la carga del archivo de encabezado de la biblioteca del sistema. Como resultado, no se puede encontrar el símbolo sem_t y se deben especificar las plataformas /android-L/arch-arm64/usr/include

paso7: Aplicación. mk write

APP_STL especifica la biblioteca de portabilidad STL que se utilizará (dinámica o estática)

APP_CPPFLAGS especifica las opciones de compilación para la compilación de la aplicación

APP_ABI especifica el tipo de especificación abi. Por ejemplo, arm64-v8a también se puede escribir como ALL para compilar todos los tipos juntos

APP_PLATFORM especifica el nombre de la plataforma que se compilará. Se puede escribir como android-L o no especifica la compilación completa.

Paso 8: Una vez completada la compilación, ejecútela.

Inicie cmd y use cd /D para ir al directorio jni de testProject

Paso 9: arrastre ndk-build.cmd en android-ndk-r10 directamente a cmd. tiempo Simplemente presione la tecla Enter para compilar. Por supuesto, también puede agregar archivos intermedios de compilación limpios para borrar.

Paso 10: Verifique el resultado de la compilación. Después de que la compilación sea exitosa, hay dos carpetas más al lado de jni en testProject, libs y obj.

El enlace a ¡El resultado de la compilación está en libs!