Próbuję zainstalować wstępnie skompilowany plik binarny w niestandardowym obrazie systemu Android. Do tego mam skopiowane go do nowego katalogu w prebuilt/android-arm/
z Android.mk
pliku podobnego do tego:Instalowanie wstępnie skompilowanego pliku binarnego na systemie Android: "nie znaleziono"
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := binary_name
LOCAL_MODULE := binary_name
LOCAL_MODULE_CLASS := EXECUTABLES
include $(BUILD_PREBUILT)
Więc jeśli biegnę make system_image binary_name
plik binarny jest kopiowany do /bin/
w systemie obrazu. A jeśli uruchomię emulator, widzę plik binarny w /system/bin
. Uprawnienia są takie same jak innych plików wykonywalnych (-rwxr-xr-x
) i, zgodnie z file
, jest to plik binarny ARM (ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
).
Ale kiedy go uruchomić na emulatorze, to mówi:
# binary_name
binary_name: not found
Mam straced go i to, co widzę:
# 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>
ale plik istnieje, i strace jest w stanie go znaleźć.
Czy masz pojęcie, co może się wydarzyć?
UPDATE: Jak mówi Kristof, to prawdopodobnie problem z dynamicznego łączenia, ale nie mam ldd dla Android ARM ...
Dzięki, jesteś pewnie we właściwy sposób, czy wiesz, jak mogę mieć HDD w obrazie systemu Android? –
Twój zestaw narzędzi do kompilacji krzyżowej może mieć jeden. Wypróbuj 'arm-android-ldd' na twoim systemie hostującym, zakładając, że twój gcc to 'arm-android-gcc'. Możesz też wypróbować "readelf -d nazwa_binalu" w systemie hosta. Oba powinny dać ci listę wymaganych bibliotek dynamicznych, ale musisz ręcznie zweryfikować listę. –
Potwierdzone, jest to coś związanego z bibliotekami współdzielonymi, jedna z nich nie jest zawarta w zbudowanym obrazie. Nie znałem readelf, jest wspaniale :) Dziękujemy! –