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 …

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.

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

  • Carácter turco en SQLite mientras utiliza la expresión LIKE
  • Conversión de tipo de C a Java
  • Acceda a los datos de activos APK de Android directamente en c ++ sin Asset Manager y copiando
  • ¿Programación para Android en un entorno 100% C ++?
  • Cómo inyectar la biblioteca en el proceso Android zygote?
  • Set / Get Java List <> del código C
  • ¿Cómo determinar un número de canal wifi utilizado por wifi ap / network?
  • Edificio Android NDK - Incluir LOCAL_SHARED_LIBRARIES?
  • Abrir la configuración de Android desde la aplicación QT (com.android.settings)
  • Instrucción Ilegal-Running Cross compilado código c en android
  • Desarrollo de Android C ++ con Visual Studio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.