Я пытаюсь установить готовый двоичный файл в пользовательский образ Android. Для этого я скопировал его в новый каталог в prebuilt/android-arm/
с файлом Android.mk
, похожим на этот:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := binary_name
LOCAL_MODULE := binary_name
LOCAL_MODULE_CLASS := EXECUTABLES
include $(BUILD_PREBUILT)
Таким образом, если я запускаю make system_image binary_name
, двоичный файл копируется в /bin/
в образе системы. И если я запускаю эмулятор, я вижу двоичный файл в /system/bin
. Разрешения такие же, как и у других исполняемых файлов (-rwxr-xr-x
), и, согласно file
, это двоичный файл ARM (ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
).
Но когда я запускаю его на эмуляторе, он говорит:
# binary_name
binary_name: not found
Я натянул его, и вот что я вижу:
# 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>
Но файл есть, и strace может его найти.
Есть идеи о том, что может происходить?
ОБНОВЛЕНИЕ : Как говорит Кристоф, возможно, это проблема динамического связывания, но у меня нет ldd для Android ARM ...