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

问题描述 投票:0回答:1

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

但我还没能回答的是:

在 VS 这样的 IDE 中

假设我们有一个名为

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

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

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

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

那么链接器如何从

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

c++ visual-c++ linker ide
1个回答
3
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.