忙里偷闲( ˇ?ˇ )闲里偷学【C语言篇】——(1)GCC介绍及C语言编译过程

一、GCC基本介绍

  GCCGNU Compiler CollectionGNU编译器套装),是一套由GNU开发的编程语言编译器。它是一套以GPLLGPL许可证所发布的*软件,也是GNU计划的关键部分,亦是*的类Unix及苹果计算机Mac OS X 操作系统的标准编译器。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。GCC原名为GNU C语言编译器GNU C Compiler),因为它原本只能处理C语言。GCC很快地扩展,变得可处理C++。之后也变得可处理FortranPascalObjective-CJavaAda,以及Go与其他语言。

二、作者介绍

  GCC是由理查德·马修·斯托曼在1985年开始的。他首先扩增一个旧有的编译器,使它能编译C,这个编译器一开始是以Pastel语言所写的。Pastel是一个不可移植的Pascal语言特殊版,这个编译器也只能编译Pastel语言。为了让*软件有一个编译器,后来此编译器由斯托曼和Len Tower在1987年以C语言重写并成为GNU项目的编译器。GCC的创建者由*软件基金会直接管理

忙里偷闲( ˇ?ˇ )闲里偷学【C语言篇】——(1)GCC介绍及C语言编译过程

  斯托曼1953年出生于美国纽约曼哈顿地区的犹太人家庭,1971年进入哈佛大学学习,同年受聘于麻省理工学院人工智能实验室(AI Laboratory),成为一名职业黑客。


  在AI实验室工作期间,斯托曼开发了多种今后影响深远的软件,其中最著名的就是Emacs。斯托曼在AI是一名典型的黑客,是整个黑客文化的一份子。


  然而进入八十年代后,黑客社群在软件工业商业化的强大压力下日渐土崩瓦解,甚至连AI实验室的许多黑客也组成了Symbolic公司,试图以专利软件来取代实验室中黑客文化的产物——可*流通的软件。


  斯托曼对此感到气愤与无奈。在对Symbolic进行了一段时间的抗争后,他于1985年发表了著名的GNU宣言,正式宣布要开始进行一项宏伟的计划:创造一套完全*,兼容于Unix的操作系统GNU(GNU‘s Not Unix!)。之后他又建立了*软件基金会来协助该计划。


  他于1989年与一群律师起草了广为使用的GNU通用公共协议证书,创造性地提出了“Copyleft”的概念。 同时,GNU计划中除了最关键的Hurd操作系统内核之外,其他绝大多数软件已经完成。

三、GCC的处理过程

(1)预处理
这个阶段用来处理所有的预处理指令,所有的预处理指令会将程序变成另外一个样子。
例如有一个init.c文件
忙里偷闲( ˇ?ˇ )闲里偷学【C语言篇】——(1)GCC介绍及C语言编译过程
上面的myhead是自定义的一个头文件,如下:
忙里偷闲( ˇ?ˇ )闲里偷学【C语言篇】——(1)GCC介绍及C语言编译过程
预处理c语言的命令为:gcc -E
忙里偷闲( ˇ?ˇ )闲里偷学【C语言篇】——(1)GCC介绍及C语言编译过程
(2)编译
对预处理后的代码进行翻译工作,得到计算机所认识的格式(编译后的文件称为目标文件,扩展名是.o)
编译的命令为:gcc -c
忙里偷闲( ˇ?ˇ )闲里偷学【C语言篇】——(1)GCC介绍及C语言编译过程
可以看到编译后会产生一个hello.o文件,这个就是计算机可以识别的二进制文件。
(3)链接
把所有的目标文件和其他必要的文件合并在一起得到最终的可执行文件(链接后的文件称为可执行文件,扩展名为.out)
忙里偷闲( ˇ?ˇ )闲里偷学【C语言篇】——(1)GCC介绍及C语言编译过程
可以直接使用gcc完成上面三步,另外还有一个-o参数用来指定生成的文件名。
忙里偷闲( ˇ?ˇ )闲里偷学【C语言篇】——(1)GCC介绍及C语言编译过程
另外GCC还有一个选项来选择编译的c语言标准
-std=c89/-std=c99 用来指定编译所遵循的C语言标准(缺省是c89标准)


忙里偷闲( ˇ?ˇ )闲里偷学【C语言篇】——(1)GCC介绍及C语言编译过程,布布扣,bubuko.com

忙里偷闲( ˇ?ˇ )闲里偷学【C语言篇】——(1)GCC介绍及C语言编译过程

上一篇:Java Template Pattern(模板模式)


下一篇:java.net.SocketException: Permission denied 连网权限