在Android上安装预构建的二进制文件:;“未找到”;

在Android上安装预构建的二进制文件:;“未找到”;,android,linux,arm,emulation,libc,Android,Linux,Arm,Emulation,Libc,我正在尝试在自定义Android映像中安装一个预构建的二进制文件。为此,我已将其复制到prebuild/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 inclu

我正在尝试在自定义Android映像中安装一个预构建的二进制文件。为此,我已将其复制到
prebuild/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)
因此,如果我运行
makesystem\u image binary\u name
,二进制文件将复制到系统映像中的
/bin/
。如果我运行模拟器,我可以在
/system/bin
中看到二进制文件。权限与其他可执行文件(
-rwxr-xr-x
)相同,根据
文件
,这是一个ARM二进制文件(
ELF 32位LSB可执行文件,ARM,版本1(SYSV),动态链接(使用共享库),剥离

但当我在模拟器上运行它时,它会说:

# 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二进制名称
execve(“/system/bin/binary\u name”、[“binary\u name”]、[/*9 vars*/])=-1 enoint(无此类文件或目录)
写入(2,“strace:exec”,12strace:exec)=12
写(2,“:”,2:)=2
写入(2,“无此类文件或目录”,25无此类文件或目录)=25
写入(2),“\n”,1
)                       = 1
提交(1,-1344063348,{…}
但是文件在那里,斯特拉斯能找到它

你知道会发生什么吗


更新:正如克里斯托夫所说,这可能是动态链接的问题,但我没有Android ARM的ldd…

可能无法找到一些必需的动态库

请尝试“ldd二进制\u名称”

如果可以找到所有库,那么输出应该有点像这样。 丢失的库应清楚标记

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)

谢谢,你的方法可能是对的,你知道如何在Android映像中使用ldd吗?你的交叉编译器工具链可能有一个。假设你的gcc是“arm Android gcc”,那么在你的主机系统上试试“arm Android ldd”。你也可以在主机系统上试试“readelf-d binary_name”。这两个工具都会给你一个所需动态库的列表,但是你需要手动验证列表。确认,这与共享库有关,其中一个未包含在生成的映像中。我不知道readelf,它很棒:)谢谢!