能否在Android上运行静态链接的ELF二进制文件?

6

Android基于Linux内核,据我所知,静态链接的ELF二进制文件只需要内核即可运行。虽然Android没有包含glibc,但系统调用接口应该仍然存在,被构建到内核中。我知道任何实际应用在静态链接时都会非常庞大,但这只是假设。它能工作吗?

2个回答

0

我猜你想做的是在Linux机器上获取一些静态库,并将它们与自己的目标文件静态链接,以尝试解决它们在Android上缺失的问题。但问题在于两台机器几乎肯定不使用相同的CPU架构,因此这些库并不是为Android构建的,机器代码也无法被Android“理解”。理论上,你需要交叉编译这些库,并将程序与其链接。

然而,Android已经有一个名为Bionic的标准C库。它取代了Android上的glibc。


0

在 Android 上进行本地开发时,通常需要创建本地的.so库,并为每种支持的架构(armarm64mipsx86x86_64)进行交叉编译。这些库可以通过JNI调用在 APK 中被加载引用。

虽然您可以使用 ELF 二进制文件(.so 文件是使用标准编译器如 gcc 制作的),但您需要为希望在应用程序上运行的每个目标架构准备一个库文件。

此外,虽然 Android 可以加载 x86 或 arm 版本的 .so 文件,但对于 x86_64arm64 来说,建议您创建所有 4 个版本(如果您正在支持四种架构)。原生库将根据文件夹结构进行加载。

示例:一个 arm46 系统将仅在不存在 lib/arm64 的情况下从 lib/arm 加载 arm .so 文件。结果是,任何包含 lib/arm64 的库都会导致您的应用在 arm64 系统上崩溃,除非您同时包含 armarm64 版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接