4个步骤:
Preprocessing预处理阶段:
即完成宏定义和include 文件展开等工作;生成.i文件。
GCC命令为:·gcc -E
Compilation编译:
根据编译参数进行不同程序的优化,编译成汇编代码;生成.s文件。
GCC命令为:·gcc -S
Assemble汇编:
用汇编器把上一阶段生成的汇编代码进一步生成目标代码;生成.o文件。
一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件)。
GCC命令为:·gcc -C
Linking链接:
用链接器把上一阶段生成的目标代码、其他一些相关的系统提供的目标代码(如crtx.o)和系统或用户提供的库链接起来,生成最终的执行代码。生成可执行文件。
链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(LibraryFile),也就是 .lib文件,在UNIX下,是Archive File,也就是.a文件。
GCC命令为: ar cr libstatic.a add.o sub.o
helloword.c -> .i -> .s -> .o
文件扩展名 | 文件类型 |
---|---|
.c | C语言代码 |
.C、 .cc | C++语言代码 |
.i | 预处理后的C语言代码 |
.s、.S | 汇编语言代码 |
.o | 目标代码 |
.a | 静态链接库(程序编译时使用) |
.so | 动态链接库(程序运行时使用) |
编译的命令是gcc。大项目的构建就需要用到make命令和makefile文件。
网友评论