一、GCC基本介绍

  GCC(GNU Compiler Collection,GNU编译器套装),是一套由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的创建者由自由软件基金会直接管理。

  斯托曼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文件
上面的myhead是自定义的一个头文件,如下:
预处理c语言的命令为:gcc -E

(2)编译
对预处理后的代码进行翻译工作,得到计算机所认识的格式(编译后的文件称为目标文件,扩展名是.o)
编译的命令为:gcc -c

可以看到编译后会产生一个hello.o文件,这个就是计算机可以识别的二进制文件。

(3)链接

把所有的目标文件和其他必要的文件合并在一起得到最终的可执行文件(链接后的文件称为可执行文件,扩展名为.out)

可以直接使用gcc完成上面三步,另外还有一个-o参数用来指定生成的文件名。

另外GCC还有一个选项来选择编译的c语言标准
-std=c89/-std=c99 用来指定编译所遵循的C语言标准(缺省是c89标准)


最新文章

  1. SQL数据库中字段类型 与C#中的对应字段类型
  2. WiFi破解
  3. JAVA基础学习day15--集合二 TreeSet和泛型
  4. Tomcat源码分析——SERVER.XML文件的加载与解析
  5. JavaScript中的作用域与函数和变量声明的提升
  6. 国内外最全的asp.net开源项目
  7. VS2015编译器问题简单记录
  8. django中static的坑
  9. 我的asp.net core目录
  10. java书籍
  11. 深入浅出 JVM ClassLoader
  12. _vimrc(VimScript脚本语言学习)
  13. SANS社区邮件情报收集【2018-12-4到2019-1-19】
  14. PHP处理大文件下载
  15. scrapy 琐碎的东西
  16. [Robot Framework] 通过SikuliLibrary可以获取到图片,但是点击失效
  17. 支付宝APP支付,提示代码 ALIN10070
  18. 常用Gene ID转换工具--转载
  19. SwipeRefreshLayout的高度测量
  20. vue 使用出现的问题(持续记录)

热门文章

  1. 设计模式之十二:状态模式(State)
  2. 文档翻译第003篇:Process Monitor帮助文档(Part 3,附Process Monitor的简单演示)
  3. 数据类型的提升(promotion)
  4. go package的理解
  5. GO语言学习(十二)Go 语言函数
  6. WebService--CXF以及CXF与Spring的整合(jaxws:server形式配置)
  7. JS学习笔记 - 透明度运动框
  8. IOS获取手机设备所有应用
  9. width:100%和width:inherit
  10. 0、驱动及应用小技巧、uboot指令及环境变量配置、linux常用命令