回顾下C语言编译流程
在Linux操作系统下,.c文件通过gcc编译器转换成可执行文件.out
在Windows操作系统下,.c文件在集成环境下转换成可执行文件.exe
本质上两个操作系统下的编译过程都是一样的,都是经过预处理、编译、汇编和链接四个流程,如下图所示:
Linux系统下:
使用gcc编译器进行
1、预处理
cat main.i文件后发现
进行预处理工作 不会自动生成文件
去掉了注释内容
字符替换
把带 # 的内容如(宏,头文件)条件编译
把“stdio.h”文件包含进来,即用“stdio.h”中的内容替换在“#include”位置
2、编译
由.i文件到.s文件,这个过程叫编译。把高级的语言转换成机器能读懂的语言,即机器语言
简单来说,源文件被预处理之后,再以字符流的形式进行处理,进行词法和语法的分析,然后通过汇编器将源代码指令转变成汇编指令、生成相应的汇编文件。
检查源代码或者经过预处理之后代码是否有错误
3、汇编
把main.s由.s文件到.o文件,这个过程叫汇编。汇编是指把汇编语言代码翻译成目标机器指令的过程,也就是把汇编码转换成机器所能识别的二进制,通过把经过汇编之后生成的文件称为目标文件。
4、链接
链接一个或者多个目标文件生成可执行程序 默认是a.out
-o 重命名
gcc *.o 链接所有的目标文件 生成 可执行程序
由.o文件到可执行文件,这个过程叫链接。经过汇编之后生成的目标文件并不能立即被执行,还需要由链接器将代码在执行过程中用到的其他目标代码及库文件进行链接,最终生成一个可执行程序。
假如.c文件中有用到printf函数,那么就需要找到包含该函数的标准库文件,对它进行链接。