当ld链接同一个库的不同版本时会发生什么

时间:2015-06-10 07:52:30

标签: c++ shared-libraries ld

假设我有版本1.1和1.2的libA.so,它们都定义了相同的符号。

如果myApp需要来自libA的符号但错误地链接两个版本会发生什么:

ld -o myApp -Lpath -lA_1_1 -lA_1_2

我是否正确它会使用第一个符号,只要它能找到它?

1 个答案:

答案 0 :(得分:0)

  

我是否正确它会使用第一个符号,只要它能找到它?

是的,总的来说。这可能不是你想要的。

如果foo()中的某个函数libA_1_2调用了库中的另一个公共函数bar(),那么它将使用libA_1_1中的符号,这可能会执行错误的操作(例如,如果库的v1.2已更改,以便foo()期望bar()取消分配一些内存,但bar()的v1.1版本不会这样做)