Cómo decirle a Android NDK que use una cadena de herramientas diferente

Phonon 09/02/2017. 3 answers, 18.326 views
android android android-ndk android-ndk toolchain

Descargué una cadena de herramientas personalizada ( linaro ) para crear aplicaciones de Android basadas en ARM. ¿Cómo le digo al NDK que lo use? ¿Puedo definir o establecer algo en Android.mk y Application.mk que me permita hacer eso? ¿Hay otra manera?

1 Comments
corbin 03/08/2012
¿Hiciste esto en Ubuntu? ¿Cómo instalaste la cadena de herramientas?

3 Answers


Peter M 03/01/2013.

Como menciona la otra respuesta, el sistema ndk-build makefile en $(NDK_ROOT)/toolchains/ y puede reflejar las ideas que ve allí. Pero hay algunos conceptos adicionales para admitir plataformas de destino que no son de Android que son interesantes, aunque pronto estarán desactualizados a medida que ndk-build comience a admitir explícitamente otras plataformas, como mingw targeting win32 (u otros compiladores de gcc que tengan como objetivo 'ol linux) .

En config.mk :

TOOLCHAIN_ABIS := (list of ABIs that the toolchain supports) 

Esta es una definición importante, porque puede usar este nombre en su Application.mk para construir usando la cadena de herramientas para un ABI particular. Una de las ventajas de corromper el uso de esta definición es que ndk-build puede construir simultáneamente para múltiples ABI. always asume que la plataforma es Android, pero si desea apuntar a win32 utilizando una cadena de herramientas basada en mingw, puede definir un "ABI" como x86-win32 , y luego usar este ABI en su Application.mk para seleccionarlo como un objetivo a través de APP_ABI:= x86-win32 Luego en sus archivos Android.mk puede usar la definición TARGET_ARCH_ABI para seleccionar fuentes específicas de win32 e incluir rutas, por ejemplo:

ifeq ($(TARGET_ARCH_ABI),x86-win32)
  LOCAL_SRC_FILES += my_win32_file.c
  LOCAL_CFLAGS += -DSOME_WIN32_SPECIFIC
endif 

La última pieza es que en setup.mk para su cadena de herramientas, puede ser insuficiente para ver otras cadenas de herramientas como ejemplos, porque lo que really hace setup.mk para una cadena de herramientas en particular es anular las configuraciones de compilación en default-build-commands.mk , por lo que lo que quiere hacer es inspeccionar ese archivo y redefinir las cosas que no le gustan.

Siguiendo el ejemplo anterior, mingw no es compatible con el indicador noexec en los archivos binarios, y puede deshacerse de esta característica agregando las siguientes líneas en su setup.mk :

# These flags are used to enforce the NX (no execute) security feature in the
# generated machine code. This adds a special section to the generated shared
# libraries that instruct the Linux kernel to disable code execution from
# the stack and the heap.
TARGET_NO_EXECUTE_CFLAGS  := # our platform doesn't support this flag!
TARGET_NO_EXECUTE_LDFLAGS := # our platform doesn't support this flag!

# These flags disable the above security feature
TARGET_DISABLE_NO_EXECUTE_CFLAGS  :=  # our platform doesn't support this flag!
TARGET_DISABLE_NO_EXECUTE_LDFLAGS :=  # our platform doesn't support this flag! 

Este es solo un ejemplo de las muchas características en default-build-commands.mk que pueden necesitar ser anuladas, y por supuesto es importante proporcionar TOOLCHAIN_NAME para que la cadena de herramientas se pueda seleccionar a través de la variable NDK_TOOLCHAIN dentro de su archivo Application.mk además a la metodología ABI que mencioné arriba.


Ian Ni-Lewis 09/12/2013.

El sistema de archivos make de NDK es bastante extensible y puedes definir una cadena de herramientas diferente. Necesitará una cierta comprensión de cómo funciona Make.

Las build/core/init.mk de build/core/init.mk se descubren y se inicializan en build/core/init.mk línea 261 (en NDKr6, la línea # puede cambiar en versiones futuras). El código de inicialización busca archivos llamados config.mk bajo $(NDK_ROOT)/toolchains/* . Por lo tanto, deberá agregar su cadena de herramientas en un subdirectorio en el directorio NDK toolchains y agregar config.mk y setup.mk a ese subdirectorio. Mire toolchains/x86-4.4.3 y toolchains/arm-linux-androideabi-4.4.3 para ver ejemplos. Debería poder cortar y pegar la cadena de herramientas ARM config.mk y setup.mk si su cadena de herramientas tiene un diseño estándar.

Una vez que haya definido una cadena de herramientas en el directorio de la cadena de herramientas, puede cambiar a ella configurando la variable NDK_TOOLCHAIN dentro de su archivo Application.mk .


lily 07/31/2017.

bueno, simplemente puede agregar "NDK_TOOLCHAIN_VERSION = 4.9" en su Application.mk

Related questions

Hot questions

Language

Popular Tags