Ich versuche, eine vordefinierte Binärdatei in einem benutzerdefinierten Android-Image zu installieren.Installieren einer vorgefertigten Binärdatei unter Android: "nicht gefunden"
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := binary_name
LOCAL_MODULE := binary_name
LOCAL_MODULE_CLASS := EXECUTABLES
include $(BUILD_PREBUILT)
Also, wenn ich make system_image binary_name
laufen, die Binärdatei /bin/
in Systemabbild kopiert: Dafür habe ich es in ein neues Verzeichnis in prebuilt/android-arm/
mit einer Android.mk
Datei ähnlich wie diese kopiert. Und wenn ich den Emulator starte, kann ich die Binärdatei in /system/bin
sehen. Die Berechtigungen sind die gleichen wie bei den anderen ausführbaren Dateien (-rwxr-xr-x
) und gemäß file
ist dies eine ARM-Binärdatei (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 kann es finden.
Irgendeine Idee von was kann passieren?
UPDATE: Wie Kristof sagt, ist dies wahrscheinlich ein Problem der dynamischen Verknüpfung ist, aber ich habe nicht ldd für Android ARM ...
Danke, Sie sind wahrscheinlich in der richtigen Weise, wissen Sie, wie kann ich LDD in einem Android-Image haben? –
Ihre Cross-Compiler-Toolchain könnte eine haben. Versuchen Sie 'arm-android-ldd' auf Ihrem Host-System, vorausgesetzt, Ihr gcc ist 'arm-android-gcc'. Sie können auch 'readelf -d binary_name' auf Ihrem Host-System versuchen. Beide sollten Ihnen eine Liste der benötigten dynamischen Bibliotheken geben, aber Sie müssen die Liste manuell überprüfen. –
Bestätigt, es handelt sich um etwas, das sich auf gemeinsam genutzte Bibliotheken bezieht, von denen eine nicht im integrierten Image enthalten ist. Ich wusste nicht, realelf, es ist toll :) Danke! –