初识gcc
gcc是“GNU Compiler Collection”的缩写,是一个编译器集合。在Linux操作系统下,gcc编译器是最常见的一种编译器,它不仅仅可以用来编译C语言,还可以用来编译C++、Java、等语言。
gcc的语法格式:gcc [选项] 参数
gcc命令的主要选项:
[-o]:指定目标文件的名称
[-g]:使生成的可执行程序中包含debug信息
[-c]:只编译不链接
[-E]:只做预处理
[-S]:由C编译成汇编
省略选项是最简单的gcc使用方式。
实例:
1.使用vim建立一个“main.c”的文件
2.输入C语言代码并保存退出
3.在终端输入命令:gcc main.c。这是会生成一个名为a.out的可执行文件。若是想指定文件名,则可以通过命令:gcc -o main main.c,把可执行文件名修改为main,并通过./main来查看运行结果
gcc编译过程详解
在上个实例中我们看到仅仅通过gcc一个步骤就生成了可执行文件。但是实际上这是经历了四个步骤。
以下面这个C源程序为例:
第一步:预编译阶段
这一阶段主要是用来处理文件中所有的伪命令,例如宏定义、头文件等,gcc编译器会将这些内容全部展开在当前文件中。
这里面的main.i就是源程序预编译后生成的中间文件,我们通过vim打开main.i,部分内容如下:
我们可以看见其中的s = PI * r *r 已经变成了s = 3.14 * r * r。说明宏定义中PI的值已经展开到了源文件中。
第二步:编译阶段
在此阶段,编译器完成C语言到汇编语言的转变。
命令:gcc main.i -S,这样就在当前目录下生成了一个main.s文件。main.s文件内的内容如下所示:
第三步:汇编阶段
将汇编语言翻译成二进制目标代码
执行命令:gcc main.s -c后,会在当前目录下生成一个main.o的二进制文件。
输入od main.o,查看main.o内的内容
第四步:链接阶段
该阶段链接器将多个目标代码文件进行链接,最终生成可执行文件。
输入命令:gcc main.o,会生成一个名为a.out的可执行文件。
输入命令:gcc -o main main.o,会生成一个名为main的可执行文件。
输入命令:./a.out或者./main,可以查看运行结果。