android c android-ndk arm cross-compiling

Compilando de forma cruzada C hello world para Android usando arm-linux-gnueabi-gcc



android-ndk cross-compiling (6)

¿Revisaste los permisos de la carpeta de datos? ¡Intenta usar el local en su lugar! Puede usar adb shell y luego hacer un cd en la carpeta donde se ejecutó el ejecutable e intentar con ./hi. Supongo que esto es solo un problema de permisos

Quiero construir un hello world estático desde C usando arm-linux-gnueabi-gcc en lugar de usar la cadena de herramientas independiente de NDK o Codesourcery para ese asunto.

En Ubuntu ...

He hecho lo siguiente:

sudo apt-get install gcc-arm-linux-gnueabi

Creé una hi.c como esta:

#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 ejecuté en un emulador como este:

adb push hi /data/hi adb shell /data/hi

Pero, entiendo esto:

[1] Illegal instruction /data/hi

¿Qué paso he olvidado? Basado en experiencias pasadas, este "debería" haber funcionado, pero obviamente lo arruiné.


Intente especificar la arquitectura / cpu. Parece que el compilador está creando código con una versión de arquitectura superior a la que el emulador puede manejar.

Esto podría funcionar:

arm-linux-gnueabi-gcc -static -march=armv5 hi.c -o hi


Me funcionó con el compilador CodeBench en el escritorio ubuntu. https://sourcery.mentor.com/sgpp/lite/arm/portal/release2029

Simplemente crea un binario estático con este comando:

arm-none-linux-gnueabi-gcc -o hello -static hello.c

luego, adb push hello / data

ir a, adb shell $ ./data/hello Esto imprimirá Hello World en la terminal. Lo mismo se puede hacer desde el teléfono también. Use el emulador de terminal o SL4A bash shell para ejecutar.


Por lo que sé, no puedes ejecutar aplicaciones de usuario en Android que no están compiladas con alguna forma de gcc-arm-linux-androideabi.


Si hago esto en una máquina Debian (VM en mi caso), todo parece estar bien. No estoy seguro de qué pasa cuando hago algo similar en ubuntu. Podría ser como sugirió Leo, pero no puedo confirmarlo. Sin embargo, esto debería funcionar para ti.

http://www.cnx-software.com/2012/01/16/installing-emdebian-arm-cross-toolchain-in-debian/

Alguien agregó este enlace, pero no usa 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/


Tu código realmente funciona para mí.

Lo compilé en Ubuntu y lo llevé a / data / local / tmp

Y luego chmod 777 hola

Finalmente funciona bien.