代码之家  ›  专栏  ›  技术社区  ›  Aniruddha Sarkar

android艺术精灵和Linux精灵文件有什么区别?

  •  3
  • Aniruddha Sarkar  · 技术社区  · 9 年前

    ART wiki中对此进行了描述: https://en.m.wikipedia.org/wiki/Android_Runtime?_e_pi_=7%2CPAGE_ID10%2C1898354483 ,ART在安装时将apk文件编译为ELF文件。

    GNU/Linux上的GCC最近也创建了ELF文件作为输出,而不是a.out格式。

    我知道这两种环境中的API和架构存在差异,但这两种格式是否存在任何结构或其他显著差异?

    如果架构相同,这些格式是否相互兼容(就像android已经移植到x86一样)?

    还是这两种文件格式完全不同?

    1 回复  |  直到 9 年前
        1
  •  4
  •   Yaroslav Havrylovych    6 年前

    自制说明:in PDF (Dalvik and ART) 你会发现“ OAT 文件实际上嵌入在ELF对象文件中”(在PDF的第16页,您可以看到OAT结构) wiki 。这是可能的,因为 ELF “在设计上是灵活和可扩展的,它不受任何特定处理器或架构的约束”。

    从…起 elf format on wikipedia :使用Android Runtime(ART)(自Android 5.0“棒棒糖”以来的默认值),所有应用程序在安装时都编译为本地ELF二进制文件。

    结论:你的问题的答案是gcc elf和android elf是相同的文件格式。有关格式的更多信息,请访问 维基 .

    使现代化

    如果架构相同,这些格式是否相互兼容

    Readelf for android oat文件(用我的一个应用程序检查)显示oat文件类型为“DYN(共享对象文件)”。它类似于.so文件,您可以看到您的项目是否使用JNI库。这些elf文件与通常的GNU/Linux elf文件不兼容,即使是为相同的架构构建的,因为“仿生的系统库功能和动态链接器”(在android中使用)。关于它们不兼容的原因的更多描述,您可以找到 here .启用仿生 wiki .