构建(build):编译和链接合并到一起的过程。
Build's process:
一Prepressing(预处理)
order:$gcc -E xxx.c –o xxx.i
($cpp xxx.c > xxx.i)
function:deletedeal add keep
注释:
delete:将所有的“#define”删除,并且展开所有的宏定义。
删除所有的注释。
deal:处理所有条件预编译指令,forexample:#if,#ifdef。
处理“#include”预编译指令,将被包含的指令插入到该与编译指令的位置。注意:这
个过程是递归进行的,文件可能还包含其他文件。
add:添加行号和文件名标识,forexample:#2“hello.c”2以便于编译器产生调试用的
行号信息及用于编译时产生编译错误或者警告时能够显示行号。
keep:保留所有的#pragma编译器指令,因为编译器需要使用他们。
二Compilation(编译)
order:$gcc -S xxx.i –o xxx.s
($gcc -S xxx.c –o xxx.s)
function:morphologygrammar semantic optimizer
注释:编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析以
及优化后生成相应的汇编代码文件。
三Assembly(汇编)
order:$asxxx.s –o xxx.o
($gcc -c xxx.s –o xxx.o)
function:assemblycode change into computer instruct
注释:汇编器就是将汇编代码转变成机器可以执行的指令,每个汇编语句几乎都对应一
条机器指令。
四Linking(链接)
order:$ld-static xxx.o….yyy.o
function:makevarious .o file link a .out
注释:链接就是将一大堆文件链接起来,最终的到可执行文件。
注释:
cc1:与编译编译程序
as:汇编器
ld:连接器