Red de conocimiento informático - Material del sitio web - Cómo ejecutar programas en lenguaje C en sistemas Android

Cómo ejecutar programas en lenguaje C en sistemas Android

Desarrollé un programa de base de datos sqlite usando mini6410 y lo ejecuté con éxito en el sistema Linux mini6410. Dado que el sistema Android también usa el kernel de Linux, pensé que usar el mismo método para portar el programa al sistema Android del mini6410 sería exitoso, pero cuando ejecuté el programa, me dijo que no se podía encontrar el archivo ejecutable (xlisten -arm es un archivo ejecutable compilado cruzado):

/ # ./xlisten-arm

/system/bin/sh: ./xlisten-arm: not found

1. Exploración:

Después de buscar en Internet, inicialmente pensé que podría deberse a que la biblioteca estaba incompleta, así que verifiqué la biblioteca de enlaces dinámicos requerida por el archivo ejecutable xlisten-arm:

Ejecutar sentencia:

# arm-linux-readelf -a ./xlisten-arm | grep "Compartido"

0x00000001 (NECESARIO) Biblioteca compartida: [libsqlite3. so.0]

0x00000001 (NECESARIO) Biblioteca compartida: [libm.so.6 ]

0x00000001 (NECESARIO) Biblioteca compartida: [libcrypt.so.1]

0x00000001 (NECESARIO) Biblioteca compartida: [libpthread.so.0]

0x00000001 (NECESARIO) Biblioteca compartida: [libdl.so.2]

0x00000001 (NECESARIO) Compartida biblioteca: [libc.so. 6]

Conociendo las bibliotecas necesarias, entré en el sistema de archivos de Android y escribí las bibliotecas apropiadas.

#cp -a filename dir

Cuando copié la biblioteca, pensé que había encontrado el origen del problema, usé

#cp -a filename dir

Cuando copié la biblioteca utilicé

#cp -a filename dir

Cuando agregué la biblioteca pensé que había encontrado las raíces del problema, agregué ¡A mi archivo para preservar las propiedades originales!

Parece que esto no es solo un problema de bibliotecas faltantes, en términos generales, si el problema es causado por una biblioteca faltante, entonces al vincular a la biblioteca, el terminal nos dirá que la biblioteca no está encontró.

2. La solución correcta:

Compila el programa usando compilación estática, es decir, usa la opción -static

Modifiqué la variable CFLAG en el Makefile.

CFLAGS = -Muro

Cámbielo a:

CFLAGS = -Muro -estático

CFLAGS = -Muro -estático

CFLAGS = -Muro -estático

CFLAGS = -Muro -estático