【问题标题】:Is there a performance lost when overlinking and underlinking .so files?对 .so 文件进行超链接和下链接时是否会损失性能?
【发布时间】:2026-01-30 20:05:02
【问题描述】:

有些人正在链接共享对象文件,因此他们的 NEEDED 列表中没有条目,并且在将这些 SO 文件链接到二进制文件时,将所有 SO 文件的传递依赖项放入创建的二进制文件的 NEEDED 列表中,而不考虑二进制文件是否真的需要那些 SO 文件。

前一种不将所需的 SO 文件链接到某个 SO 文件的行为称为 underlinking,后一种将过多的 SO 文件链接到某个二进制文件的行为称为 overlinking

我正在与我的同事讨论这种构建应用程序及其 SO 文件的方案是否会在构建或运行应用程序或其 SO 文件时产生任何性能成本。例如,PLT 的动态符号解析是否存在额外成本?有人可以对此有所了解吗?

【问题讨论】:

  • 我想符号解析和重定位的数量比链接的.so 文件的数量更重要。动态链接器当然喜欢dlopen,维护每个.so的引用计数

标签: linux linker shared-libraries dynamic-linking


【解决方案1】:

它肯定会改变符号查找的性能,可能会变得更糟。 ELF 符号解析是一种广度优先搜索,从可执行文件本身的符号表开始,然后是可执行文件的 DT_NEEDED 库的符号表,然后是这些库的 DT_NEEDED 符号表等。通过覆盖主可执行文件,您可能会强制更多符号查找遍历更多库的符号表。

【讨论】: