linux下C程序的编译链接
linux下C程序的编译可以分为四个步骤,分别是预处理,编译,汇编和链接。
1.预编译:
首先预处理完成预替换、去注释、头文件按照路径展开、以及条件编译。
建立一个test.c文件。里面写入注释、宏定义、头文件、条件编译。
如下图:
使用的gcc命令是:gcc -E test.c -o test.i
gcc -E的作用是将.c文件转化成.i文件
使用vi命令打开test.i
此时我们发现宏定义已被替换,处理所有条件预编译指令,处理“#include”预编译指令,注释也已经被删除。
2.编译:
把预处理完的文件进行一系列词法分析,语法分析,语义分析及生成相应的汇编代码。
使用的gcc命令是:gcc –S tets.i -o test.s
gcc -S的作用是将.i文件转化成.s文件
打开test.s文件
此时我们发现,编译已经把C语言转化为汇编语言了。
3.汇编:
将汇编代码转变成机器可执行的指令。
使用的gcc命令是:gcc –c test.s -o test.o
gcc -S的作用是将.s文件转化成.o文件
打开test.o文件
通过上图,我们可以发现汇编实际上指把汇编语言代码翻译成目标机器指令的过程。
目标文件中所存放的也就是与源程序等效的目标的机器语言代码。
汇编程序生成的目标文件实际上是可重定位文件,它其中包含有适合于其它目标文件链接来创建一个可执行的或者共享的目标文件的代码和数据。
4.链接:
生成exe可执行程序。
使用的gcc命令是:gcc test.o -o test
这样可以得到计算机能读懂的二进制文件
打开test文件