linux下C程序的编译链接

linux下C程序的编译可以分为四个步骤,分别是预处理,编译,汇编和链接。

1.预编译:

首先预处理完成预替换、去注释、头文件按照路径展开、以及条件编译。

建立一个test.c文件。里面写入注释、宏定义、头文件、条件编译。

如下图:

linux下C程序的编译链接_第1张图片

使用的gcc命令是:gcc -E test.c -o test.i 

gcc -E的作用是将.c文件转化成.i文件

linux下C程序的编译链接_第2张图片

使用vi命令打开test.i

linux下C程序的编译链接_第3张图片

此时我们发现宏定义已被替换,处理所有条件预编译指令,处理“#include”预编译指令,注释也已经被删除。

2.编译:

把预处理完的文件进行一系列词法分析,语法分析,语义分析及生成相应的汇编代码。

使用的gcc命令是:gcc –S tets.i -o test.s 

gcc -S的作用是将.i文件转化成.s文件



linux下C程序的编译链接_第4张图片

打开test.s文件

linux下C程序的编译链接_第5张图片

此时我们发现,编译已经把C语言转化为汇编语言了。

3.汇编

将汇编代码转变成机器可执行的指令。

使用的gcc命令是:gcc –c test.s -o test.o

gcc -S的作用是将.s文件转化成.o文件

linux下C程序的编译链接_第6张图片

打开test.o文件

linux下C程序的编译链接_第7张图片



通过上图,我们可以发现汇编实际上指把汇编语言代码翻译成目标机器指令的过程。

目标文件中所存放的也就是与源程序等效的目标的机器语言代码。
汇编程序生成的目标文件实际上是可重定位文件,它其中包含有适合于其它目标文件链接来创建一个可执行的或者共享的目标文件的代码和数据。

4.链接

生成exe可执行程序。

使用的gcc命令是:gcc test.o -o test

这样可以得到计算机能读懂的二进制文件linux下C程序的编译链接_第8张图片


打开test文件


linux下C程序的编译链接_第9张图片


你可能感兴趣的:(Linux)