【发布时间】:2019-02-13 06:22:44
【问题描述】:
假设我有一个共享对象加载时依赖关系图和符号 foo 在 .so 之一中引用。假设这个符号foo 也在其他几个共享对象中定义。我的问题是:将找到哪个定义,什么是查找顺序以及定义的位置(在什么标准,手册页中)?
示例: 考虑一个依赖图 https://i.imgur.com/jdhD3V0.png
其中以 ldd 顺序列出的库,例如
ldd a.so
b.so
d.so
让我们假设 foo 在 c.so 和 d.so 中定义并首先在 f.so 中引用。我的实验表明,来自 d.so 的实现将由链接器执行。看起来图书馆是按bfs 顺序搜索的。这是正确的吗?这是否与库加载顺序一致?我在任何文档中都找不到这个,必须确保它不是实现定义的。
谢谢!
【问题讨论】:
标签: linker shared-libraries elf