链接器如何找到正确的库?

How the linker find the correct library?

我知道什么是预处理,编译器是如何工作的,以及 linker link 如何处理 object 文件

但我仍然无法回答的是:

在一个IDE像VS

假设我们有一个名为 DariushTest.o 的库实现了一个名为 print() 的函数,并且有一个名为 test.h 的 header 文件 我们还有其他库实现了 print() 函数 但我们不在我们的代码中包含他们的 header 文件 假设我们在代码中包含 test.h header 并且我们在主函数

中使用 print() 函数

现在!如果有几个库实现了这个功能。

代码编译后,linker如何找出这段代码与哪个库相关,应该与哪个文件相关link?

我问这个问题的原因是 header 文件没有连接到 DariushTest.o 文件,编译器不关心它。

那么 linker link 是 DariushTest.o 中的 print() 函数而不是其他库中的函数? link 人如何找到正确的图书馆?

那么链接器如何链接来自 DariushTest.o 而不是来自其他库的 print() 函数?

没有。如果您通过在 2 个不同的编译单元中使用相同的函数名称来打破 ODR,则程序的行为是未定义的。链接器可能会注意到并诊断重新定义,也可能不会。