Installation d'un fichier binaire préconfiguré sous Android: "introuvable" & # 8221;
Question
J'essaye d'installer un binaire pré-construit dans une image Android personnalisée. Pour cela, je l'ai copié dans un nouveau répertoire dans préconfiguré / android-arm /
avec un fichier Android.mk
similaire à celui-ci:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := binary_name
LOCAL_MODULE := binary_name
LOCAL_MODULE_CLASS := EXECUTABLES
include $(BUILD_PREBUILT)
Donc, si j'exécute make system_image nom_binaire
, le fichier binaire est copié dans / bin /
dans l'image système. Et si je lance l'émulateur, le fichier binaire se trouve dans / system / bin
. Les autorisations sont les mêmes que pour les autres exécutables ( -rwxr-xr-x
) et, selon le fichier
, il s’agit d’un fichier binaire ARM ( ELF 32 bits). Exécutable LSB, ARM, version 1 (SYSV), liaison dynamique (utilise des bibliothèques partagées), supprimée
).
Mais quand je l'exécute sur l'émulateur, il est écrit:
# binary_name
binary_name: not found
Je l'ai tracé et voici ce que je peux voir:
# 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>
Mais le fichier est là et strace est capable de le trouver.
Avez-vous une idée de ce qui peut se passer?
MISE À JOUR : comme le dit Kristof, il s’agit probablement d’un problème de liaison dynamique, mais je n’ai pas ldd pour Android ARM ...
La solution
Certaines des bibliothèques dynamiques requises sont introuvables.
Essayez 'ldd nom_binaire'
La sortie devrait ressembler un peu à ceci si toutes les bibliothèques peuvent être trouvées. Les bibliothèques manquantes doivent être clairement indiquées.
linux-gate.so.1 => (0xb7fbf000)
libcap.so.2 => /lib/libcap.so.2 (0xb7fa7000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7fa3000)
libncursesw.so.5 => /lib/libncursesw.so.5 (0xb7f64000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7f3e000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7dde000)
libattr.so.1 => /lib/libattr.so.1 (0xb7dd9000)
/lib/ld-linux.so.2 (0xb7fc0000)