【问题标题】:Installing a prebuilt binary on Android: "not found"在 Android 上安装预构建的二进制文件:“未找到”
【发布时间】:2009-06-25 19:19:08
【问题描述】:

我正在尝试在自定义 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...

【问题讨论】:

    标签: android linux arm emulation libc


    【解决方案1】:

    可能找不到一些需要的动态库。

    试试'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)
    

    【讨论】:

    • 谢谢,您的方法可能是正确的,您知道如何在 Android 映像中添加 ldd 吗?
    • 您的交叉编译器工具链可能有一个。假设您的 gcc 是“arm-android-gcc”,请在您的主机系统上尝试“arm-android-ldd”。您还可以在主机系统上尝试“readelf -d binary_name”。两者都应该为您提供所需动态库的列表,但您需要手动验证该列表。
    • 已确认,与共享库有关,其中一个未包含在构建的映像中。我不知道 readelf,太好了:)谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2020-08-02
    • 2018-04-12
    相关资源
    最近更新 更多