编译 C 源文件时,我们会包含头文件,例如使用 #include "myheader.h"
。
预处理器将在编译文件之前扩展此头文件。但是,它是如何准确找到这个头文件的呢?我相信,头文件的路径作为参数传递给使用 -I
的链接器,例如 gcc。
我一直认为链接器只有在编译后才运行。那么链接器实际上是否在之前运行以查找头文件等内容,并在编译后运行以组合各种目标文件等?谢谢
最佳答案
header 主要声明元符号和函数原型(prototype),允许编译器匹配/检查函数的交叉编译单元调用。
链接器感兴趣的所有实际符号都在 C 文件中定义。编译器可以在代码生成期间使用预处理器符号 (#defines),但随后它们会内联到生成的代码中。
同样,对于 C++ 内联方法或模板,代码由编译器在使用它们的位置生成。
这意味着链接器不需要 header 中的任何内容,所需的任何内容都已由编译器处理到生成的代码流中(到汇编器或目标文件编译器输出)。
所以不,包含文件与链接器无关。
关于c - 链接器是否查找头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59251013/