Установка предварительно созданного двоичного файла на Android:“не найден”

StackOverflow https://stackoverflow.com/questions/1043257

Вопрос

Я пытаюсь установить предварительно созданный двоичный файл в пользовательский образ 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...

Это было полезно?

Решение

Возможно, некоторые из требуемых динамических библиотек не могут быть найдены.

Попробуйте 'ldd binary_name'

Выходные данные должны выглядеть примерно так, если можно найти все библиотеки.Отсутствующие библиотеки должны быть четко обозначены.

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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top