Android基于Linux内核,据我所知,静态链接的ELF二进制文件只需要运行内核。虽然Android不包含glibc,但系统调用接口应该仍然存在,内置于内核中。我知道任何实际的应用程序在静态链接时都会巨大,但这纯粹是假设的。它会起作用吗?
答案 0 :(得分:1)
我想你想要做的就是在Linux机器上使用一些静态库,并将它们与你自己的目标文件静态链接,以试图克服它们在Android上的缺席。问题在于这两台机器几乎肯定不会使用相同的CPU架构,所以这些库不是为Android而构建的,而且机器代码也不会被理解为"通过Android。从理论上讲,您也必须对库进行交叉编译,并将程序与该程序链接起来。
然而Android已经有一个名为Bionic的标准C库。它取代了Android上的glibc。
答案 1 :(得分:0)
对于Android上的原生开发,您通常会创建原生的 .so 库,这些库需要针对每个支持的体系结构进行交叉编译(arm
,arm64
,mips
,x86
,x86_64
)。这些库可以使用 JNI 调用由APK引用加载。
虽然您可以使用ELF二进制文件( .so 文件是使用标准编译器(如gcc)创建的),但您需要为每个目标体系结构创建一个您希望运行应用程序的文件。
此外,Android 可以加载x86
的{{1}}或arm版本 .so 文件x86_64
分别建议创建所有4个版本,如果这是您支持的版本。基于文件夹结构加载本机库。
示例:只有在arm64
不存在的情况下,arm46
系统才会从lib/arm
加载arm .so 文件。结果是任何包含lib / arm64的库都会导致您的应用在lib/arm64
系统上中断,除非您同时包含arm64
& arm
个版本。