gcc编译器常识

来源:互联网 发布:人工智能所用到的语言? 编辑:程序博客网 时间:2024/05/18 22:14

在Linux操作系统中,编写C/C++的代码时经常需要使用gcc这款强大的编译器。

gcc是GNU C Compiler的意思,经过多年的发展,从一开始只支持C语言的编译到了今天可以支持数种编程语言的编译,包括C++、Java、Objective-C、Pascal语言等等,其功能已经从GNU C Compiler 变成了 GNU Compiler Collection。


以下通过一幅图来了解一下gcc的工作流程和常用参数。


(说明:.c文件是指以.c为后缀的文件)


gcc编译器编译C语言程序时,有.c文件到可执行文件一共经历4个步骤,包括:预处理、编译、汇编和链接

1、预处理(preprocessing)

预处理阶段把.c源文件处理输出为.i文件,其效果是:把.c文件中的一些头文件展开等。

-E参数可以使gcc编译器在编译程序的时候在预处理过后停止,并输出所对应的.i文件,如上图所指。

2、编译(complication)

编译阶段后输出.s文件,.s文件里包含的是汇编指令。

-s参数可以使gcc编译器在编译程序的时候在编译处理后停止,并输出对应的.s文件。

3、汇编(assembly)

汇编阶段后输出.o目标文件。

-c参数可以使编译过程在输出.o目标文件后停止,并不进行链接。

4、链接(linking)

链接阶段把多个目标文件以及库文件链接起来,并生成最后可运行的执行文件。


在使用gcc编译器的过程中,除了以上常用的参数后,还有一个-o参数也是比较常用的。

-o参数的作用是指定输出文件,该参数不在乎所输出的文件是何种类型,无论是可执行文件、汇编文件、目标文件还是预处理后的C代码文件,但是只能有一个输出文件。所以,如果是多个源文件同时编译则不适用,但如果只需输出一个可执行文件就可以使用。

如 gcc -o test.c abctest,把test.c经过以上四个步骤后生成一个名为abctest的可执行文件;

如 gcc -c test.c -o abctest.o,把test.c经过前三个步骤生成一个名为abctest.o的目标文件。


gcc编译时还经常会加上-Wall 这个参数:

-Wall:输出gcc在编译过程中所遇到的所有warning,默认情况下是不输出的。


参考资料:http://www.shanghai.ws/gnu/gcc_1.htm

0 0
原创粉丝点击