我正在尝试在自定义 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
我已经跟踪了它,这就是我所看到的:
# 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 能够找到它。
知道会发生什么吗?
更新:正如 Kristof 所说,这可能是动态链接的问题,但我没有适用于 Android ARM 的 ldd ......