我遇到了一个问题,该问题已在一篇好文章“共享库符号冲突(在 Linux 上)”中详细阐述。问题是,当执行和.so定义了同名函数时,如果.so调用这个函数名,它会调用执行中的那个函数,而不是.so本身的这个函数。
我们来谈谈这篇文章中的案例。我了解DoLayer()中的函数在编译时layer.o具有外部函数依赖性。DoThing()layer.o
但是在编译时libconflict.so,外部函数依赖项不应该就地解析并用conflict.o/DoThing()静态地址替换吗?
为什么layer.o/DoLayer()仍然使用动态链接来查找DoThing()?这是设计好的行为吗?