【发布时间】:2020-04-02 16:22:54
【问题描述】:
在编译 C 源文件时,我们会包含头文件,例如使用 #include "myheader.h"。
预处理器会在编译文件之前扩展这个头文件。但是,它是如何准确找到这个头文件的呢?我相信,头文件的路径作为参数传递给使用-I 的链接器,例如gcc。
我一直认为链接器只在编译后运行。那么链接器实际上是否在运行之前运行,以查找头文件等内容,以及在编译后组合各种目标文件等?谢谢
【问题讨论】:
-
像
gcc这样的前端程序的-I(大写i)选项被传递给预处理器,而不是链接器。 -
在正常的事件过程中,在 C 中,链接器对头文件不做任何事情。它处理目标文件和库——共享的和静态的。但是,对于像
gcc -o program -I/home/project/include source.c -L/home/project/lib -lproject这样的命令行,编译使用预处理器(在source.c)、编译器本身和链接器,所有这些都在一个命令行调用中。 -
链接器根本不关心头文件也不关心 .c 文件
标签: c gcc compilation linker c-preprocessor