Estoy tratando de instalar un archivo binario precompilado en una imagen personalizada de Android. Para ello, he copiado a un nuevo directorio en prebuilt/android-arm/
con un archivo Android.mk
similar a éste:Instalación de un binario precompilado en Android: "no encontrado"
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := binary_name
LOCAL_MODULE := binary_name
LOCAL_MODULE_CLASS := EXECUTABLES
include $(BUILD_PREBUILT)
Así que si me quedo make system_image binary_name
, el archivo binario se copia en /bin/
imagen del sistema en. Y si ejecuto el emulador, puedo ver el archivo binario en /system/bin
. Los permisos son los mismos que los otros ejecutables (-rwxr-xr-x
) y, de acuerdo con file
, este es un binario ARM (ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
).
Pero cuando lo ejecuto en el emulador, que dice:
# binary_name
binary_name: not found
He straced él y esto es lo que puedo ver:
# strace binary_name
execve("/system/bin/binary_name", ["binary_name"], [/* 9 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec", 12strace: exec) = 12
write(2, ": ", 2:) = 2
write(2, "No such file or directory", 25No such file or directory) = 25
write(2, "\n", 1
) = 1
io_submit(1, -1344063348, {...} <unfinished ... exit status 1>
embargo, el archivo está allí, y strace es capaz de encontrarlo
¿Alguna idea de lo que puede estar pasando?
ACTUALIZACIÓN: Como dice Kristof, esto es probablemente un problema de enlace dinámico, pero no tengo LDD para Android ARM ...
Gracias, probablemente estés en el camino correcto, ¿sabes cómo puedo tener ldd en una imagen de Android? –
Su herramienta de compilación cruzada puede tener una. Pruebe 'arm-android-ldd' en su sistema host suponiendo que su gcc es 'arm-android-gcc'. También puede probar 'readelf -d nombre_binario' en su sistema host. Ambos deberían proporcionarle una lista de las bibliotecas dinámicas requeridas, pero deberá verificar la lista manualmente. –
Confirmado, es algo relacionado con las bibliotecas compartidas, una de ellas no está incluida en la imagen construida. No sabía readelf, es genial :) ¡Gracias! –