本文的目的是教会大家如何使用gcc,查了不少的资料才明白编译过程中的具体含义。
1.创建一个c程序源文件
源程序名为1,以.c结尾
![](https://img-blog.csdnimg.cn/img_convert/bad7748bc778d6b68b4302ac582fa462.png)
输入程序内容并保存
![](https://img-blog.csdnimg.cn/img_convert/98f27b2b3ef9c3ce61a07cc1cbf5e7b1.png)
2.预处理
使用ls命令查看该目录下现有的文件,只有1.c。
![](https://img-blog.csdnimg.cn/img_convert/1a28a0d0be7ca3eef58cb7093fa87d0d.png)
使用gcc -E命令,进行预处理,1.c为所要编译的源程序文件名,> 后的1.i为预处理后生成的C文件,预处理不对源文件进行分析,而是对源文件进行文本操作,如删除源文件中的注释,在源文件中插入包含文件的内容(#include),定义符号并替换源文件中的符号等(#define),通过这些处理,将会得到编译器实际进行分析的文本,即.i文件。
![](https://img-blog.csdnimg.cn/img_convert/e61902ee2d7ee43b59634bd9c9788a5b.png)
3.编译
使用gcc -S 1.i进行编译,1.i为之前的预处理后的c文件,系统会生成1.s,这是用汇编语言编写的源代码文件。
![](https://img-blog.csdnimg.cn/img_convert/7a808241be485d0bd3a766a376897a03.png)
可以打开查看(这就是汇编文件)
![](https://img-blog.csdnimg.cn/img_convert/9aea7a65db87aff0675156f572fcbb75.png)
4.汇编
使用gcc -c 1.s汇编原来的汇编文件1.s,生成1.o,这是就是object, 也就相当于windows下编译的obj文件, 俗称目标文件。
![](https://img-blog.csdnimg.cn/img_convert/5968ccdbd31dba0dd74a78dc6250e481.png)
目标文件(objectfile)即存放目标代码的计算机文件,它常被“称作”二进制文件(binaries)。目标文件包含着机器代码(可直接被计算机中央处理器执行)以及代码在运行时使用的数据,如重定位信息,如用于链接或调试的程序符号表(变量和函数的名字),此外还包括其他调试信息。
在Windows中,如下
![](https://img-blog.csdnimg.cn/img_convert/7a4c09697f236f9d09973e51bb89b58f.png)
5.链接
使用gcc 1.0 -o 1命令进行链接,生成了1这个可执行文件(绿色)。
![](https://img-blog.csdnimg.cn/img_convert/482a5a89bb928cfe26807b0a1e663123.png)
在Windows中如下。
![](https://img-blog.csdnimg.cn/img_convert/1052e2d147b8c8daf9fdd8de53a9f2f4.png)
6.执行可执行文件
直接输入./1即可运行,输出hello world。
![](https://img-blog.csdnimg.cn/img_convert/5e6eebf824e9684f716f84cb0431b3c3.png)
以上就是在linux环境下运行的所有过程详解,当然gcc的命令格式还有很多,可以使用man gcc命令查看具体的命令的意思。
每次编译过程中也不必这么麻烦。可以直接写gcc 1.c
![](https://img-blog.csdnimg.cn/img_convert/25d55c5bbe739b69d4f35fe4fceb5131.png)
则会将 1.c 预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为 a.out。然后直接./a.out即可输出。
![](https://img-blog.csdnimg.cn/img_convert/6aeccde3d934a6fc1851fb304026b62d.png)
其他gcc的语法可以点击链接查看gcc。