我希望每个动态链接的ELF二进制文件都有
.gnu.version_r
部分(或标记为DT_VERNEED
的其他部分),以及然而,似乎有可能编译器/链接器添加DT_NEEDED
条目(即嵌入所需共享对象的名称)而没有任何必需的版本信息。
我能找到的最接近的陈述是Linux Standard Base Core Specification 3.1
所有ELF对象都可以提供或依赖版本化符号
,更准确一点,在http://www.akkadia.org/drepper/symbol-versioning:
该实现允许每个DSO使用其版本 符号与否。取决于DSO是否链接了对象 如果有符号或不符号,则对DSO的引用需要符号 或不。
如果我理解正确,这说明可以创建没有暴露符号的版本信息的共享对象。因此,如果没有必需的版本信息,可以引用这些符号。
我的解释是否正确?
这些情况应该很少,因为,为什么编译器/链接器不包含任何版本信息?
答案 0 :(得分:1)
如果我理解正确,这说明可以创建没有暴露符号版本信息的共享对象。
正确。共享库在引入版本化符号之前大约需要10年。版本化符号是GNU / GLIBC扩展名。
因此,可以在没有必要版本信息的情况下引用这些符号。
版本信息是可选。
这些情况应该很少,因为,为什么编译器/链接器不包含任何版本信息?
Au逆转。编译器/链接器不包含版本信息,除非程序员告诉他们,并且这在GLIBC之外并不常见。