目标SharedLib与目标Symbolic和目标Strip之间的差异

时间:2014-10-18 13:22:59

标签: android compilation ril

我为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 /)?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

以下是一些链接以获取更多信息:

About the shared library file format (elf)

About stripping

希望它有所帮助!