Cross compilando el mundo estático H hello para Android usando arm-linux-gnueabi-gcc
Quiero construir un mundo hola estático de C usando arm-linux-gnueabi-gcc en lugar de usar la cadena de herramientas independiente de NDK o de Codesourcery para ese asunto.
En Ubuntu …
- ¿Cómo habilitar C ++ 11 para Android Studio?
- Android NDK clang compilador no puede encontrar std :: make_unique
- Ndk-gdb no puede encontrar gdb.setup
- Optimización de funciones de montaje de neón
- OpenGL ES 2.0 vs OpenGL 3 - Similitudes y diferencias
He hecho lo siguiente:
sudo apt-get install gcc-arm-linux-gnueabi
He creado un hi.c como este:
#include <stdio.h> int main(int argc, char** argv) { printf("hello world\n"); return 0; }
Lo he compilado así:
arm-linux-gnueabi-gcc -static hi.c -o hi
Lo corrí en un emulador como este:
adb push hi /data/hi adb shell /data/hi
Pero, tengo esto:
[1] Illegal instruction /data/hi
¿Qué paso he olvidado? Basado en la experiencia pasada este "debe" haber trabajado, pero obviamente metido esto.
- Cygdrive Error de terminal: opus / src / opus.o error
- Recibe todos los caracteres unicode de SoftInput cuando usa android NativeActivity
- Enredado con la prueba de Google
- JNI: Llamar a GetStaticMethodID explotar
- Múltiples módulos nativos en Android Studio
- Descifrar el archivo cifrado AES en C # con java
- Certificado de Libcurl Pinning trabajando en el iPhone pero no en Android
- Android: File IO de la tarjeta SD usando el NDK
Trate de especificar la arquitectura / CPU. Parece que el compilador está creando código con una versión de arquitectura superior que el emulador puede manejar.
Esto podría funcionar:
arm-linux-gnueabi-gcc -static -march=armv5 hi.c -o hi
Funcionó para mí con el compilador de CodeBench en el escritorio de Ubuntu. https://sourcery.mentor.com/sgpp/lite/arm/portal/release2029
Simplemente cree un binario estático con este comando:
Brazo-ninguno-linux-gnueabi-gcc -o hello -static hello.c
Entonces, adb push hello / data
Ir a, adb shell $ ./data/hello Esto imprimirá Hello World en el terminal. Lo mismo se puede hacer desde el teléfono también. Utilice el emulador de terminal o shell bash SL4A para ejecutar.
Si hago esto en una máquina de Debian (VM en mi caso), todo parece bien. No estoy seguro de cuál es el error al hacer lo mismo en ubuntu. Podría ser como sugirió Leo, pero no puedo confirmarlo. Esto debería funcionar para usted sin embargo.
http://www.cnx-software.com/2012/01/16/installing-emdebian-arm-cross-toolchain-in-debian/
Alguien agregó este enlace, pero no está usando la cadena de herramientas que mencioné en la descripción. Dejándolo en caso de que alguien esté interesado.
http://tariqzubairy.wordpress.com/2012/03/09/arm-binaries-static-library-for-android/
Por lo que sé, no se pueden ejecutar aplicaciones de usuario-tierra en Android que no se compilan con alguna forma de gcc-arm-linux-androideabi.
Su código realmente funciona para mí.
Lo compilé en Ubuntu y lo empujo a / data / local / tmp
Y luego chmod 777 hola
Finalmente funciona bien.
¿Comprobó los permisos de la carpeta de datos? Trate de usar el local en su lugar! Sólo puede usar adb shell y luego cd en la carpeta donde se ha empujado el archivo ejecutable y probar ./hi. Supongo que esto es sólo un problema de permisos
- SDK Ubicación no encontrada Android Studio + Gradle
- Android: transacciones SQLite al usar ContentResolver