【问题标题】:Android NDK x86 and x86_64 ABIAndroid NDK x86 和 x86_64 ABI
【发布时间】:2019-08-07 17:21:39
【问题描述】:

我最近在 Android Studio 中创建了一个简单的“Hello World”Android NDK 项目,并尝试使用 gradle/cmake/clang 构建系统。

我创建了一个包含 main 方法的 main.c 文件:

#include <stdio.h>

int main()
{
    printf("Hello, world");
    return 0;
}

我的 cmakelist.txt 文件将使用 Android NDK 工具链编译此文件以生成我命名为 ndk_example_c 的可执行文件:

add_executable( # Sets the name of the library.
        ndk_example_c

        # Provides a relative path to your source file(s).
        main.c
        )

gradle/cmake 为 4 个默认 ABI 生成 4 个二进制文件:

  • armeabi-v7a
  • arm64-v8a
  • x86
  • x86_64

我设法使用 adb shell 在 Android 设备上运行 arm abi 可执行文件。但是,我希望能够在 Windows 或 Linux 上运行 x86 和 x86_64 可执行文件,但二进制文件似乎不是标准的可执行文件。

所以,我的问题是:gradle 生成的 x86 和 x86_64 二进制文件的目标平台/操作系统是什么?有人设法运行它们吗?

谢谢,

【问题讨论】:

  • 它们是为 Android x86/x86_64 构建的。就像您无法获取 Windows 可执行文件并在 Linux 上运行它(没有某种仿真层)一样,您也无法在 Windows 或 Linux 上运行 Android 可执行文件。它们是不同的操作系统。
  • 其实我以为Android是在linux之上运行的。这就是为什么希望程序无需添加即可在 Linux 上运行的原因。
  • 它基于Linux内核,但内核-用户空间API不一定相同。
  • 谢谢,这说明了重点。文件系统层次结构和配置并不完全相同,我还可以看到可执行文件请求的默认动态链接器不是标准的 linux 链接器。

标签: android gradle cmake android-ndk


【解决方案1】:

x86 或 …64 最有用的目标平台是 Android 模拟器,您无需离开 Android Studio 即可通过 AVD 运行它。还有其他模拟器,它们可能会提供更好的性能或附加功能。

这些 Android APK 的另一个平台是 ChromeBook。有一个独立的effort 可以将Android 带到任何PC。请注意,您可能需要对应用进行一些调整才能在大屏幕上看起来不错。

最后,存在一些配备 Atom CPU 的 Android 设备。像华硕 ZenFone 2 这样的手机现在并不常见,但你可以找到一些使用 x86 的机顶盒。

【讨论】:

  • 是的,我认为运行它们的最佳方式是在适用于 x86/x64 平台的 android 模拟器或您所说的英特尔设备上。在运行 readelf 命令时,我可以看到可执行文件正在寻找位于 /system/bin/linker 的动态加载器,这与位于 /lib/ld-linux.so* 的 linux 加载器完全不同。这解释了为什么可执行文件不能在 Linux 上运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2012-04-23
  • 1970-01-01
  • 2015-04-06
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多