Android 目标SharedLib与目标符号和目标条之间的差异

Android 目标SharedLib与目标符号和目标条之间的差异,android,compilation,ril,Android,Compilation,Ril,我编译了适用于android的libhuaweiril通用库,并生成了三个文件: target SharedLib:libhuaweigeneric ril(…/LINKED/libhuaweigeneric ril.so) 目标符号:libhuaweigeneric ril(…/symbols/system/lib/libhuaweigeneril.so) 目标条带:libhuaweiril(…/lib/libhuaweiril.so) 任何人能解释一下这些文件是什么吗?哪一个适用于and

我编译了适用于android的libhuaweiril通用库,并生成了三个文件:

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

任何人能解释一下这些文件是什么吗?哪一个适用于android(system/lib/)?

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

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

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

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

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

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

以下是有关更多信息的链接:


希望有帮助

我倾向于相信,在这个特定的例子中(我们谈论的是Android),符号库实际上是一个只包含符号的库(需要在构建时链接),而完整的共享库可以在目标设备上找到。这样,私有API实现就不会分发给Android开发人员。此外,苹果公司也广泛使用这种方法实现私有API。