安装在Android预建的二进制:“找不到”
题
我试图在定制的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
我straced它,这是我所看到的:
# 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)
不隶属于 StackOverflow