r16 - ¿Qué compilador usa el NDK de Android?
ndk not configured android studio (3)
Estoy escribiendo código basado en ARM NEON para una aplicación de Android y estaba luchando con ciertos indicadores del compilador que no se reconocen. Más tarde me di cuenta de que el soporte para esos indicadores solo se agregó hace poco y que mi versión de GCC es más antigua. Lo estoy haciendo todo en Windows y estoy limitado por las versiones que Cygwin tiene para ofrecer. Aquí está mi pregunta: antes de ir e intentar construir GCC 4.6.0 en mi máquina Windows y hacer que a Cygwin le guste, ¿funcionará para mí o el NDK usa su propia versión de GCC y mi actualización no la afectará en absoluto? ? Si lo hace, ¿es posible decirle que use un compilador diferente?
Con respecto a NDK r8d, se puede modificar de 2 maneras (ver Andriod ndk ):
- Para ndk-build, exporte la variable NDK_TOOLCHAIN_VERSION = 4.7 o agréguela a Application.mk.
- Para compilaciones independientes, agregue la opción --toolchain = a make-standalone-toolchain.sh
--toolchain=arm-linux-androideabi-4.7
El compilador predeterminado se establece en ndk / build / core / setup-toolchain.mk (consulte NDK_TOOLCHAIN y NDK_TOOLCHAIN_VERSION)
GCC está en desuso a favor del ruido a partir de NDK 11 (marzo de 2016)
Mencionado en el historial de revisiones oficial: https://developer.android.com/ndk/downloads/revision_history.html
Cómo cambiar entre compiladores se pregunta en:
- ¿Cómo cambiar entre gcc y clang en Android NDK Revision 11?
- Las últimas características de C ++ 11 con Android NDK
Y puedes comprobarlo fácilmente con:
enum CONSTEXPR {N = 256};
char s[N];
#ifdef __clang__
snprintf(s, N, "%s", "clang" __clang_version__);
#else
# ifdef __GNUC__
snprintf(s, N, "%s %d.%d.%d", "gcc", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
# endif
#endif
luego solo registre o devuélvalo a un TextView
.
El NDK invoca un compilador cruzado personalizado construido en el compilador arm-eabi-gcc
. Hay ejemplos de personas que crean cadenas de herramientas personalizadas que utilizan implementaciones GCC estándar bog con soporte para conjuntos de instrucciones ARM, pero eso está fuera de mi alcance. La mayoría de las cosas que he leído en el pasado siempre trataron el uso de la cadena de herramientas incluida con el NDK para compilar el código nativo.
Corolario: la mayoría de las personas que se han quejado y han tenido que hacer su propia cadena de herramientas han sido personas que estaban molestas con el (supuesto) soporte de C ++ sub-par del compilador de la cadena de herramientas NDK. No puedo hablar de esto porque algunos de los artículos eran más antiguos y Android cambia tan rápidamente. Tampoco ha sido una opinión que parece aparecer con demasiada frecuencia.