【问题标题】:difference between target SharedLib and target Symbolic and target Strip目标 SharedLib 和目标 Symbolic 和目标 Strip 之间的区别
【发布时间】:2014-10-18 13:22:59
【问题描述】:

我为android编译了libhuaweigeneric-ril库,生成了三个文件:

  • 目标 SharedLib:libhuaweigeneric-ril(.../LINKED/libhuaweigeneric-ril.so)
  • 目标符号:libhuaweigeneric-ril (.../symbols/system/lib/libhuaweigeneric-ril.so)
  • 目标条带:libhuaweigeneric-ril (.../lib/libhuaweigeneric-ril.so)

谁能解释一下这些文件是什么?哪个是 android(system/lib/) 的?

【问题讨论】:

    标签: android compilation ril


    【解决方案1】:

    我还没有尝试编译该库,但是根据我在 UNIX 系统上的知识和经验,我可以为您提供一些信息。

    基本上,共享库是由程序(或应用程序)在运行时加载的库。它允许程序通过调用共享库中包含的函数来执行额外的操作。

    第一个文件是库的标准版本。它包含您编译的源文件中声明的所有符号(函数和变量)。

    第二个文件是第一个文件(或第三个文件)上的符号链接,这在 Unix 系统上很常见。创建共享库时,您通常使用版本号创建它(例如“awesomelib.so.1.0”),并创建一个带有指向它的通用名称的符号链接(在我们的示例中为“awesomelib.so”)。 由于共享库注定要在运行时加载,如果您在代码中使用包含版本号的名称引用它,则需要在每次库更新时更新您的代码。但是如果你使用符号链接名称,你不需要在每次库更新时修改你的代码,你只需要更新符号链接,使其指向新版本的库。

    最后,第三个文件是第一个文件的精简版。剥离意味着一些符号(例如调试信息,或未使用的函数或变量)已从第一个文件中删除,以使库更轻。

    在您的情况下,由于您的库名称中没有版本号,我建议您在开发时使用第一个,而在应用的发布版本中使用第三个。

    这里有一些链接可以了解更多信息:

    About the shared library file format (elf)

    About stripping

    希望对您有所帮助!

    【讨论】:

    • 我倾向于相信在这种特定情况下(我们谈论的是 Android),符号库实际上是一个仅符号库(需要在构建时链接),而完整的共享库是在目标设备上找到。这样私有 API 实现不会分发给 Android 开发人员。此外,这种方法被 Apple 广泛用于他们的私有 API 实现。
    猜你喜欢
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2014-04-10
    • 2013-08-30
    • 2011-08-18
    相关资源
    最近更新 更多