精灵可执行文件:导入符号的必需版本信息



我希望每个动态链接的精灵都有

  1. .gnu.version_r部分(或另一部分标记为DT_VERNEED),然后
  2. 本节包含从动态链接的共享对象导入的每个符号所需的版本。

然而,似乎有可能在没有任何必需的版本信息的情况下添加编译器/链接器添加DT_NEEDED条目(即嵌入所需共享对象的名称)的情况。

我能找到的最接近的语句是在Linux标准基本核心规范中3.1

所有精灵对象都可以提供或依赖于版本的符号

,更精确,在http://www.akkadia.org/drepper/symbol-versioning:

该实现允许每个DSO使用任何版本 是否符号。取决于dso是否链接的对象 反对是否有符号,对DSO的引用需要符号 是否。

如果我正确理解它,则说可以在没有版本信息的情况下为暴露符号创建共享对象。因此,可以参考这些符号,而无需必需版本信息。

我的解释正确吗?

这些情况应该很少见,因为编译器/链接器为什么不包含任何版本信息?

如果我正确理解,这说明可以创建无用符号的版本信息的共享对象。

正确。共享的库早于将版本的符号引入大约10年。版本的符号是gnu/glibc扩展。

因此,可以参考这些符号,而无需必需的版本信息。

版本信息为可选

这些情况应该很少见,因为编译器/链接器为什么不包含任何版本信息?

au反对。除非程序员告诉他们,否则编译器/链接器do 不包含版本信息,并且在Glibc之外并不常见。

最新更新