【问题标题】:Do ELF object files store file system paths for dependent libraries?ELF 对象文件是否存储依赖库的文件系统路径?
【发布时间】:2016-12-13 19:58:19
【问题描述】:

当我们用ld 链接可执行文件时,我们会给出可执行文件所依赖的库列表。这是这些库位置信息的唯一来源,还是作为元数据存储在目标文件中的依赖库的首选版本的一些信息?

具体问题是这样的:如果我链接两个依赖库lAlB,它们都依赖于第三个库lC,并且我将对这些库的引用放在链接行上。 lA 中的 C++ 类方法调用的 lC 版本似乎与 lB 中的类方法不同。这怎么可能?我通过查看gdb 中的回溯知道这一点。

【问题讨论】:

  • 使用静态库,您所描述的不可能可能发生。因此,要么你的描述是错误的,要么你对观察结果的解释是错误的。不幸的是,您没有足够详细地描述任何一个来复制您的实验,因此无法提供进一步的帮助。编辑您的问题,显示一个最小的示例,所有内容都会显示出来。

标签: ld elf static-linking abi object-files


【解决方案1】:

他们可能会。 DT_RPATH 用于符号解析。它们还包含完整的对象名称,可能包含版本号,如果库正确使用版本控制,则符号实际上不会相互冲突。

我可以将您发送到我的博客,以了解DT_RPATHDT_SONAME

【讨论】:

  • 我应该更清楚地说明我问的是静态链接。
  • 你的意思是静态库的链接?然后它听起来更有趣,可能是一个不同的问题。如果这些类方法是内联的,编译器可能在libAlibB 对象中发出了不同的符号副本,从而改变了地址。否则可能是可见性规则问题。
猜你喜欢
  • 1970-01-01
  • 2017-07-11
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
相关资源
最近更新 更多