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

问题描述:

Android基于Linux内核,据我所知,静态链接的ELF二进制文件只需要运行一个内核。尽管Android不包含glibc,但系统调用接口仍应存在,并且内置于内核中。我知道任何实际的应用程序将是庞大的静态链接时,但这纯粹是假设。它会起作用吗?是否有可能在Android上运行静态链接的ELF二进制文件?

我想你要做的是在你的Linux机器上采取一些静态库,并将它们与你自己的目标文件静态链接,试图克服它们在Android上的缺席。问题在于这两台机器几乎肯定不会使用相同的CPU架构,因此这些库不是为Android构建的,机器码不会被Android“理解”。理论上讲,你也必须交叉编译这些库,并将它与你的程序连接起来。

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

要让Android您通常会创建本地。所以库,需要编译为每个支持的架构(armarm64mipsx86x86_64)跨本地发展。可以使用JNI调用通过APK引用这些库。

虽然你可以使用的ELF可执行文件(。所以文件与标准编译器制成,如GCC),您将需要一个你想上运行你的应用程序的每个目标架构。

也同时让Android 可以加载x86或手臂版本的.so文件分别x86_64 & arm64建议创建所有4个版本,如果这是你支持什么。本地库基于文件夹结构加载。

示例:一个arm46系统将加载臂。所以文件出lib/arm ONLY IF lib/arm46不存在。结果是任何包含lib/arm64的库都会导致您的应用在arm64系统上中断,除非您同时包含arm & arm64版本。