首页 > 解决方案 > 链接器如何找到正确的库?

问题描述

我知道预处理是什么,编译器是如何工作的,以及链接器如何链接目标文件

但我仍然无法回答的是:

在像 VS 这样的 IDE 中

假设我们有一个名为的库DariushTest.o,它实现了一个名为的函数并调用print()了一个头文件test.h ,并且我们有其他库实现了该print()函数,但我们没有在代码中包含它们的头文件假设我们在代码中包含头文件test.h并且我们使用print()函数在我们的主函数中

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

编译代码后,链接器如何找出这段代码与哪个库相关以及它应该链接到哪个文件?

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

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

标签: c++c++11visual-c++idelib

解决方案


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

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


推荐阅读