c - 链接器是否查找头文件

标签 c gcc compilation linker c-preprocessor

编译 C 源文件时,我们会包含头文件,例如使用 #include "myheader.h"

预处理器将在编译文件之前扩展此头文件。但是,它是如何准确找到这个头文件的呢?我相信,头文件的路径作为参数传递给使用 -I 的链接器,例如 gcc。

我一直认为链接器只有在编译后才运行。那么链接器实际上是否在之前运行以查找头文件等内容,并在编译后运行以组合各种目标文件等?谢谢

最佳答案

header 主要声明元符号和函数原型(prototype),允许编译器匹配/检查函数的交叉编译单元调用。

链接器感兴趣的所有实际符号都在 C 文件中定义。编译器可以在代码生成期间使用预处理器符号 (#defines),但随后它们会内联到生成的代码中。

同样,对于 C++ 内联方法或模板,代码由编译器在使用它们的位置生成。

这意味着链接器不需要 header 中的任何内容,所需的任何内容都已由编译器处理到生成的代码流中(到汇编器或目标文件编译器输出)。

所以不,包含文件与链接器无关。

关于c - 链接器是否查找头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59251013/

相关文章:

c++ - 远程启动 C++ 应用程序

c - 我 undefined reference 已定义

c - 启动时存储的函数内部定义的本地数据在哪里

控制流程理解

c - 如何检查 char** 中的特定单词(char*),如 "add"并使用 if 语句进行加法

gcc - 随着 ARM : wrong linker

gcc - 获取当前的 GCC 架构

c++ - 有选择地仅对翻译单元的一部分禁用 GCC 警告

java - 从具有循环依赖性的命令行编译

java - 如何在没有 IDE 的情况下编译这个基本的 Spring 应用程序?