Installieren eines vorkompilierte Binär auf Android: „nicht gefunden“
Frage
Ich versuche, eine vorkompilierte Binär-Dateien in einem benutzerdefinierten Android Bild zu installieren. Dafür habe ich es in ein neues Verzeichnis in prebuilt/android-arm/
mit einer Android.mk
Datei ähnlich wie diese kopiert:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := binary_name
LOCAL_MODULE := binary_name
LOCAL_MODULE_CLASS := EXECUTABLES
include $(BUILD_PREBUILT)
Wenn ich also make system_image binary_name
ausführen, wird die binäre Datei in Systemabbild /bin/
kopiert. Und wenn ich den Emulator laufen kann ich die Binärdatei in /system/bin
sehen. Die Berechtigungen sind die gleichen wie die anderen ausführbaren Dateien (-rwxr-xr-x
) und nach file
, das ist ein ARM-Binär (ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
).
Aber wenn ich es auf dem Emulator laufen, heißt es:
# binary_name
binary_name: not found
Ich habe es straced und das ist, was ich sehen kann:
# 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>
Aber die Datei ist da, und strace ist in der Lage, es zu finden.
Jede Idee, was kann passieren?
UPDATE : Wie Kristof sagt, ist dies wahrscheinlich ein Problem der dynamischen Verknüpfung, aber ich habe nicht ldd für Android ARM ...
Lösung
Vielleicht einige der benötigten dynamischen Bibliotheken können nicht gefunden werden.
Versuchen 'ldd binary_name'
Die Ausgabe sollte ein wenig so aussehen, wenn alle Bibliotheken gefunden werden können. Fehlende Bibliotheken sollten deutlich gekennzeichnet sein.
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)