13

我正在寻找在 Android 4.1 (Jelly Bean) 上运行本机 ARM 可执行文件的方法。例如,编译经典的 C 程序

// hello.c
#include <stdio.h>
int main() {
    printf("Hello world");
}

到 ARMv7a 可执行文件,比如hello使用 Android NDK,然后在 Android shell 中运行它。/data/local我尝试了网络上建议的方法,例如将可执行文件推送到

adb push hello /data/local

更改权限以允许其执行

adb shell chmod 755 /data/local/hello

然后在 shell 中使用

adb shell /data/local/hello

最后一步失败并出现错误:

/data/local/hello: not found

但显然文件在那里。我怀疑问题在于 Jelly Bean 的外壳不再允许执行外星二进制文件。谁能证实这一点并给我一个解决方案?

4

2 回答 2

6

如果要在 Android 中运行本机 ARM 二进制文件,则必须使用-static进行编译。

您用于构建的libc(如果使用标准 ARM 工具链而不是 Android NDK)与 Android 的libc(仿生)不同,因此当您的二进制文件打算动态链接到目标上的libc时,它不会因为libc不存在目标。

使用-static选项,您可以在构建时从libc中链接您需要的内容,而不必担心动态链接内容。

于 2012-11-02T20:57:24.810 回答
1

检查 adb push 是否没有转储“权限被拒绝”错误。通过运行检查文件是否存在: adb shell ls /data/local

由于我更新到 4.0.4,我无法访问 /data/local,只能访问 /data/local/tmp,这可以解释“未找到”错误。

于 2012-10-08T11:02:49.413 回答