c++ - 链接器如何找到正确的库?
问题描述
我知道预处理是什么,编译器是如何工作的,以及链接器如何链接目标文件
但我仍然无法回答的是:
在像 VS 这样的 IDE 中
假设我们有一个名为的库DariushTest.o
,它实现了一个名为的函数并调用print()
了一个头文件test.h
,并且我们有其他库实现了该print()
函数,但我们没有在代码中包含它们的头文件假设我们在代码中包含头文件test.h
并且我们使用print()
函数在我们的主函数中
现在!如果有几个库已经实现了这个功能。
编译代码后,链接器如何找出这段代码与哪个库相关以及它应该链接到哪个文件?
我问这个问题的原因是头文件没有连接到 DariushTest.o 文件并且编译器不关心它。
那么链接器如何链接不是来自其他库的print()
函数呢?DariushTest.o
链接器如何找到正确的库?
解决方案
那么链接器如何链接来自 DariushTest.o 而不是来自其他库的 print() 函数?
它没有。如果通过在 2 个不同的编译单元中使用相同的函数名来破坏ODR,则程序的行为是未定义的。链接器可能会注意到并诊断重新定义,也可能不会。
推荐阅读
- php - 如何为基于 WordPress 的网站创建适当的 Session 变量
- swift - 无法将项目构建到物理设备 Xcode
- html - 如何更改下拉文本的颜色(引导程序)
- powershell - Powershell电子邮件不包括附件?
- azure-web-app-service - 将 App 服务与 Sign-in with apple 集成
- java - 在 Spring Boot 中区分嵌入式 Tomcat 中的多个连接器/端口之间的请求
- wordpress - mr.green 在 Wordpress 上被黑了什么
- laravel - Edit Form方法Fill(包vform)
- amazon-web-services - 术语 - ECR repo uri vs ECR repo name
- excel - VBA 更改线条颜色