Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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

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

    3 Solutions collect form web for “Cómo decirle a Android NDK que utilice una cadena de herramientas diferente”

    Como la otra respuesta menciona, los toolchains son descubiertos por ndk-build makefile system en $(NDK_ROOT)/toolchains/ y puedes reflejar ideas que ves allí. Pero hay algunos conceptos adicionales para soportar plataformas de destino no Android que son interesantes, aunque pueden ser pronto obsoletas, ya que ndk-build comienza a soportar explícitamente otras plataformas, como mingw targeting win32 (u otros compiladores gcc que apuntan a 'linux' .

    En config.mk :

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

    Esta es una definición importante, ya que puede utilizar este nombre en su Application.mk para crear utilizando la cadena de herramientas para un ABI en particular. Uno de los beneficios de corromper el uso de esta definición, es que ndk-build puede construir simultáneamente para múltiples ABI. Siempre se supone que la plataforma es Android, pero si quieres apuntar a win32 usando una cadena de herramientas basada en mingw, puedes definir un "ABI" como x86-win32 , y luego usar este ABI en tu Application.mk para seleccionarlo como un complemento Target vía APP_ABI:= x86-win32 Luego, en los archivos de Android.mk puede utilizar 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 pieza final es que en setup.mk para tu toolchain, puede ser insuficiente para mirar otros toolchains como ejemplos, porque lo que setup.mk para una toolchain particular realmente hace es reemplazar la configuración de build en default-build-commands.mk , así que Lo que quieres hacer es inspeccionar ese archivo y redefinir las cosas que no te gustan.

    Siguiendo el ejemplo anterior, mingw no admite el indicador noexec en los 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 sólo un ejemplo de las muchas características de 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 mediante la variable NDK_TOOLCHAIN dentro de su archivo Application.mk además A la metodología ABI que menciono anteriormente.

    El sistema makefile de NDK es bastante extensible y de hecho puede definir una cadena de herramientas diferente. Necesitará un poco de comprensión de cómo funciona Make.

    Las build/core/init.mk de build/core/init.mk se descubren e inicializan en la línea 261 de build/core/init.mk (en NDKr6, la línea # puede cambiar en futuras versiones). El código de inicialización busca archivos denominados config.mk en $(NDK_ROOT)/toolchains/* . Por lo tanto, necesitará agregar su cadena de herramientas en un subdirectorio bajo el directorio de cadenas de herramientas de NDK y agregar un setup.mk config.mk y setup.mk a ese subdirectorio. Busque toolchains/x86-4.4.3 y toolchains/arm-linux-androideabi-4.4.3 . Usted debe ser capaz de 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 estableciendo la variable NDK_TOOLCHAIN dentro de su archivo Application.mk .

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

      FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.