GCC编译C程序的步骤

GCC编译器其实也是 Linux GCC命令,它以命令的形式在终端(Shell)中使用,有很多选项。

GCC 是一个交叉平台的编译器,目前支持几乎所有主流 CPU 处理器平台(例如 i386、ix86_64、SPARCE、ARM、MIPS 等),它可以完成从 C、C++、Objective-C 等源文件向运行在特定 CPU 硬件上的目标代码的转换。

GCC 不仅功能非常强大,结构也异常灵活,便携性(portable)与跨平台支持(cross-platform support)特性是GCC的显著优点。

GCC 具有丰富的配套工具链支持。GCC 不是一个孤立的编译器,而是整个 GNU 工程中的一个组成部分。GNU 工程中的其他软件,包括 GNU C 库 glibc、GNU 的调试工具 gdb,以及 GNU 二进制工具链 binutils(GNU Binutils Toolchains,例如汇编工具 as,连接工具 ld,目标文件分析工具 objdump、objcopy 等)等都与 GCC 关系密切,互相依赖。

接下来以一个具体的例子来阐述GCC是如何对C程序进行编译的:

如上所述,在终端中GCC是以命令的形式使用的,

(1)-E:这个命令是对程序进行预处理,这个过程包括(宏替换、头文件展开、条件编译、去注释),将我们所编写的C程序变成一个符合要求的C程序

所编写的C程序:

#include 
#include 
#define MAX 18
int main()
{//定义两个变量,并求和
    int a = 10;
    int b = 20;
    int c = a + b;
    printf("%d\n",c);
    //输出MAX的值
    printf("%d\n",MAX);
    return 0;
}

对程序进行预处理:

如图生成test.i 文件,查看预处理之后的程序(去掉了注释,进行了宏替换)

GCC编译C程序的步骤_第1张图片

(2)-S:对程序进行编译,将C程序转化成汇编语言

GCC编译C程序的步骤_第2张图片

如图生成了一个test.s文件,对该文件进行查看:

GCC编译C程序的步骤_第3张图片

(3)-c:汇编过程,将汇编语言转化成二进制文件(此时的二进制文件不能执行)

GCC编译C程序的步骤_第4张图片

如图汇编之后生成一个test.o文件(可执行文件),对此文件进行查看:

GCC编译C程序的步骤_第5张图片

使用 od test.o 可看到0 1序列:

GCC编译C程序的步骤_第6张图片

(4)-o:这个命令可以写也可以不写,此处省略,对程序进行连接,生成可执行文件;

如图生成a.out可执行文件;

运行程序:

综上:

GCC编译程序的步骤:
预处理(宏替换、头文件展开、条件编译、去注释)将C程序标准化;-E

编译:将C语言转化成汇编语言;-S

汇编:将汇编语言转化成二进制文件(此时的二进制文件不能执行);-c

链接:生成可执行的二进制文件;-o

其他命令即详述:

http://www.runoob.com/w3cnote/gcc-parameter-detail.html

 

你可能感兴趣的:(c语言)