【发布时间】: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