Installing a prebuilt binary on Android: "not found"
android, arm, emulation, libc, linux
Solution
Perhaps some of the required dynamic libraries can't be found.
Try 'ldd binary_name'
The output should look a little like this if all libraries can be found. Missing libraries should be clearly marked.
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)
Problem
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...