假设我有 1.1 和 1.2 版的 libA.so,它们都定义了相同的符号。
如果 myApp 需要来自 libA 的符号但错误地链接了两个版本,会发生什么:
ld -o myApp -Lpath -lA_1_1 -lA_1_2
我说得对吗,只要它能找到它,它就会使用第一个符号中的符号?
最佳答案
Am I right it will use symbols from the first one as long as it can find it?
是的,一般来说。这可能不是您想要的。
如果 libA_1_2
中的函数 foo()
调用库中的另一个公共(public)函数 bar()
,那么它将使用符号来自 libA_1_1
,这可能会做错事(例如,如果库的 v1.2 已更改,以便 foo()
需要 bar()
释放一些内存,但 bar()
的 v1.1 版本不这样做)。
关于c++ - 当 ld 链接同一个库的不同版本时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30750333/