I'm trying to install a prebuilt binary in a custom Android image. For that I have copied it to a new directory in prebuilt/android-arm/
with an Android.mk
file similar to this one:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := binary_name
LOCAL_MODULE := binary_name
LOCAL_MODULE_CLASS := EXECUTABLES
include $(BUILD_PREBUILT)
So if I run make system_image binary_name
, the binary file is copied to /bin/
in system image. And if I run the emulator I can see the binary file in /system/bin
. The permissions are the same as the other executables (-rwxr-xr-x
) and, according to file
, this is an ARM binary (ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
).
But when I run it on the emulator, it says:
# binary_name
binary_name: not found
I have straced it and this is what I can see:
# 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>
But the file is there, and strace is able to find it.
Any idea of what can be happening?
UPDATE: As Kristof says, this is probably a problem of dynamic linking, but I don't have ldd for Android ARM...