Red de conocimiento informático - Conocimiento informático - Cómo configurar las opciones de compilación del NDK

Cómo configurar las opciones de compilación del NDK

1. Descripción general

Primero revise las responsabilidades respectivas de Android.mk y Application.mk en el desarrollo de Android NDK.

Android.mk es responsable de configurar lo siguiente:

(1) Nombre del módulo (LOCAL_MODULE)

(2) Archivos fuente a compilar (LOCAL_SRC_FILES)

p>

(3) Bibliotecas de terceros de las que depender (LOCAL_STATIC_LIBRARIES.LOCAL_SHARED_LIBRARIES)

(4) Opciones de compilación/enlace (LOCAL_LDLIBS, LOCAL_CFLAGS)

Application.mk, es responsable de configurar lo siguiente:

(1) Tipo ABI de la plataforma de destino (valor predeterminado: arameabi) (APP_ABI)

(2) Cadena de herramientas (predeterminada valor: GCC 4.

p>

(3)Tipo de biblioteca estándar C (predeterminado: sistema) (APP_STL)

(4) modo de lanzamiento/depuración (predeterminado: lanzamiento)

Así podemos ver que las opciones de compilación involucradas en este artículo están disponibles en Android.mk y Application.mk. Las detallaremos una por una a continuación

2.APP_ABI

ABI es la interfaz binaria, que define una serie de reglas que permiten que el código objeto binario compilado se ejecute en todos los sistemas operativos y plataformas de hardware compatibles con ABI sin cambios (para definiciones detalladas, consulte la Enciclopedia Baidu o Wikipedia. )

Con base en la definición anterior, podemos determinar que ABI define las reglas y que la implementación específica la completan el compilador, la CPU y el sistema operativo****. Diferentes chips de CPU (como ARM, Intel x86, MIPS) admiten diferentes arquitecturas ABI. Los tipos de ABI comunes incluyen: armeabi, armeabi-v7a, x86, x86_64, mips, mips64, arm64-v8a, etc.

Esta es la razón por la que compilamos los programas binarios. ejecutarse en Windows no puede ejecutarse en Mac OS/Linux /La razón para ejecutarse en Android es que los chips de la CPU y los sistemas operativos son diferentes y admiten diferentes tipos de ABI, por lo que no pueden reconocer los programas binarios de los demás. El principio básico de lo que llamamos "compilación cruzada" también es el mismo. Estrechamente relacionado con esto, la compilación cruzada significa usar una herramienta de compilación cruzada para generar un programa ejecutable binario en una plataforma y compilarlo en otra plataforma. ¿Se debe hacer esto porque la herramienta de compilación cruzada implementa otra definición de plataforma? Usamos la herramienta de compilación cruzada NDK de Android en la plataforma Windows/Linux para compilar la biblioteca para la plataforma Android por la misma razón.

Estos son los tipos de ABI admitidos por el último NDK de Android y sus diferencias:

Entonces, ¿cómo especificar el tipo de ABI? Simplemente agregue una línea al archivo Application.mk:

APP_ABI := armeabi-v7a //Compile solo la versión armeabi-v7a APP_ABI := armeabi armeabi-v7a //Compile armeabi, versión armeabi-v7a APP_ABI : = all //Compila todas las versiones

3.

LOCAL_LDLIBS

Android NDK proporciona la biblioteca Bionic libc y muchas otras bibliotecas, que se pueden agregar como dependencias al archivo Android.mk de la siguiente manera:

En el archivo 1.mk Agregar como dependencia:

LOCAL_LDLIBS := -lfoo

LOCAL_LDLIBS := -lfoo

Las siguientes bibliotecas están vinculadas de forma predeterminada al compilar el NDK de Android y no es necesario agregado a LOCAL_LDLIBS:

(1) Biblioteca Bionic libc

(2) Biblioteca pthread (-lpthread)

(3) Matemáticas (- lmath)

(4) Biblioteca de soporte C (-lstdc)

La siguiente tabla muestra las bibliotecas compatibles con diferentes versiones de NDK de Android que se pueden agregar a "LOCAL_LDLIBS":

Las siguientes son bibliotecas compatibles con diferentes versiones de Android NDK que se pueden agregar a "LOCAL_LDLIBS":

Las siguientes son algunas opciones de compilación CFLAGS comunes que he resumido:

(1 ) Opciones generales de compilación

-Opción de optimización de compilación de O2, generalmente elija O2, teniendo en cuenta el grado de optimización y el tamaño objetivo

-Wall activa todas las advertencias durante el proceso de compilación

-ubicación de compilación de fPIC Código irrelevante, generalmente usado para compilar bibliotecas de enlaces dinámicos fPIC compila código independiente de la posición, generalmente usado para compilar bibliotecas de enlaces dinámicos

-compartido Compilar bibliotecas de enlaces dinámicos

-fopenmp Activa el paralelismo multinúcleo Calcular

-Idir configura la ruta para buscar archivos de encabezado. Si hay varias opciones -I, las rutas se buscan de izquierda a derecha, es decir, se busca la ruta que aparece primero

-nostdinc Esta opción indica que el proceso de búsqueda no se va a normalizar. nostdinc Esta opción indica que no se deben buscar archivos de encabezado en la ruta estándar, sino solo en la ruta especificada por la opción -I y la ruta actual.

--sysroot=dir Utilice dir como directorio raíz lógico para los archivos de encabezado y biblioteca. Por ejemplo, normalmente si el compilador busca archivos de encabezado en /usr/include y archivos de biblioteca en /usr/lib, reemplazará las rutas correspondientes con dir/usr/include y dir/usr/lib.

-llibrary encuentra la biblioteca llamada biblioteca para vincular

-Ldir agrega la ruta de búsqueda del archivo de la biblioteca especificada por la opción -l, es decir, el compilador irá a la ruta del directorio y busque el archivo de biblioteca especificado -l.

-nostdlib Esta opción indica que no se deben utilizar archivos de biblioteca en la ruta estándar al vincular

(2) Opciones de compilación relacionadas con la plataforma ARM

-marm - mthumb Cualquiera de las opciones especifica si se compila el conjunto de instrucciones Thumb o el conjunto de instrucciones ARM

-march=name especifica una arquitectura ARM específica, las más utilizadas incluyen: -march=armv6, -march=armv7-a

-mfpu=name especifica el tipo de procesador de punto flotante de la plataforma de destino; los más utilizados incluyen -mfpu=neon, -mfpu=vfpv3-d16

-mfloat-abi=name especifica el objetivo El ABI del presupuesto de punto flotante de la plataforma, los más utilizados incluyen -mfpu=neon, -mfpu=vfpv3-d16

-mfloat-abi=name especifica el ABI del presupuesto de punto flotante de la plataforma de destino , los parámetros admitidos incluyen: "soft", "softfp" y "hard"