首先我们通过命令让.c文件预编译一下
执行完后,就会形成一个test.i 的文件,
我们先来看一下之前.c 文件中有什么内容
我们再看一下预处理后.i文件中有什么内容
其实上边还有很多的内容,对比这两张图片,我们可以看到,预编译过程会进行头文件展开,去掉注释,宏替换等一些文本性的操作
以及所有的预处理指令都是在预处理阶段处理的
下面我们来看一下编译过程都进行了什么,我们还是通过命令先形成一下这个文件
它就会形成file.s这个文件,我们可以打开这个文件
我们可以看到都是一些汇编代码,也就是说,编译过程将C语言代码生成了汇编指令
接下来就是汇编这个过程,指令是
这里的目标文件我们上边说过是二进制文件,我们直接打开肯定是乱码,但是在Linux下gcc编译的目标文件和可执行文件都是按照ELF这种文件的格式来存储的,我们想打开的话也可以
可以看到右下角是我们认识的一些符号,所以汇编过程也会形成符号表
编译过程完成之后,就到了链接过程
这里的file就是我们的可执行文件
所以在链接这个过程,经历了符号表的合并和重定位以及合并段表,因为前边我们可以看到,代码都是分成段去存储的
有这些不同的种类
那么到这里,一个非常简单的从一个C语言文件到可执行文件的过程就说清楚了