【发布时间】:2020-11-03 04:27:07
【问题描述】:
我遇到了一篇好文章 Shared Library Symbol Conflicts (on Linux) 中详细阐述的问题。问题是,当执行和.so定义了同名函数时,如果.so调用这个函数名,它会在执行中调用那个函数而不是.so本身中的这个。
让我们来谈谈这篇文章中的案例。我了解layer.o 中的DoLayer() 函数在编译layer.o 时具有DoThing() 的外部函数依赖关系。
但是在编译libconflict.so的时候,不应该就地解析外部函数依赖,直接用conflict.o/DoThing()的地址静态替换吗?
为什么layer.o/DoLayer() 仍然使用动态链接来查找DoThing()?这是一种设计行为吗?
【问题讨论】:
标签: linux gcc ld elf dynamic-linking