当我们链接同一库的不同版本时会发生什么?

What happens when ld link different versions of the same library

本文关键字:什么 版本 链接 我们      更新时间:2023-10-16

假设有libA。因此,在1.1和1.2版本中,它们都定义了相同的符号。

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

ld -o myApp -Lpath -lA_1_1 -lA_1_2

我是对的,它会使用第一个符号,只要它能找到它?

我是对的,它会使用第一个符号,只要它能找到它?

一般来说是的。这可能不是你想要的。

如果libA_1_2中的函数foo()调用库中的另一个公共函数bar(),那么它将使用libA_1_1中的符号,这可能会做错误的事情(例如,如果库的v1.2更改为foo()期望bar()释放一些内存,但v1.1版本的bar()不这样做)。