目标 SharedLib、目标 Symbolic 和目标 Strip 之间的区别

4
我编译了适用于Android的libhuaweigeneric-ril库,并生成了三个文件:
  • 目标共享库: 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

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

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

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

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

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

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

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

关于共享库文件格式(elf)的说明

关于削减的说明

希望这有所帮助!


我倾向于相信,在这种特定情况下(我们正在谈论Android),符号库实际上是一个仅包含符号的库(在构建时需要链接),而完整的共享库则位于目标设备上。这样,私有API实现就不会分发给Android开发人员。此外,苹果公司也广泛使用这种方法来实现其私有API。 - Bogdan V.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接