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 ...

Était-ce utile?

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top