linux系统下C语言程序编译过程

预处理

编译器将C程序的头文件编译进来,还有宏的替换,可以用gcc的参数-E来参看。
预处理 命令:gcc -E hello.c -o hello.i
作用:将hello.c预处理输出hello.i

编译

这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言。可用gcc的参数-S来参看。
编译器(ccl)将文本文件hello.i 翻译成文本文件hello.s, 它包含一个汇编语言程序。
汇编语言程序中的每条语句都以一种标准的文本格式描述了一条低级机器语言指令。
编译命令:gcc -S hello.i -o hello.s
作用:将预处理输出文件hello.i汇编成hello.s文件

汇编

把编译阶段生成的.s 文件转换为二进制目标代码。可用gcc的参数-c来参看。
汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成可重定位目标程序的格式, 并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,它的字节编码是机器语言。
汇编命令:gcc -c hello.s -o hello.o
作用:将汇编输出文件hello.s编译输出hello.o文件

链接

把obj文件链接为可执行的文件:链接器(ld)负责.o文件的并入,结果就是hello文件。
它是一个课执行的目标文件,可以加载到存储器后由系统调用。
链接命令:gcc hello.o -o hello