预编译:主要处理那些源代码文件中的以 “#” 开始的预编译指令。如 #include、#pragma、#define。
$ gcc -E client.cpp -o client.i
或 $ cpp client.cpp > client.i
编译:整个程序构建的核心部分,也是最复杂的部分。把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生成相应的汇编文件。
$ gcc -S client.i -o client.S c++中对应为cc1plus
汇编:将汇编代码转换为可执行的指令。
$ gcc -c client.s -o client.o
链接:主要内容就是将各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接。主要过程:地址和空间分配、符号决议和重定位。
重定位就是地址修正的过程,就是给程序中每个绝对地址引用的位置打补丁,使他们指向正确的地址。