GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。
  GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理C++。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。
 
  Gcc所支持后缀名解释:

后 缀 名

所对应的语言

后 缀 名

所对应的语言

.c

C源文件

.s/.S

汇编语言源文件

.C/.cc/.cxx

C++源文件

.h

预处理文件(头文件)

.m

Objective-C源文件

.o

目标文件

.i

已经预处理的C源文件

.a/.so

编译后的库文件

.ii

已经预处理的C++源文件

   
 
Gcc的编译流程分为了四个步骤:
  ①预处理(Pre-Processing)
  ②编译(Compiling)
  ③汇编(Assembling)
  ④链接(Linking)
 
(1)预处理阶段:
  对源程序中的伪指令(即以#开头的指令)和特殊符号进行处理的过程。伪指令包括:1)宏定义指令;2)条件编译指令;3)头文件包含指令。
  命令:gcc -E hello.c -o hello.i
(2)编译阶段:
  在这个阶段中,Gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc把代码翻译成汇编语言
  命令:gcc -S hello.i -o hello.s
(3)汇编阶段:
  汇编的过程实际上是将汇编语言代码翻译成二进制机器语言的过程。
  命令:gcc -c hello.s -o hello.o
(4)链接阶段:
  目标代码不能直接执行,要想将目标代码变成可执行程序,还需要进行链接操作。才会生成真正可以执行的可执行程序。链接操作最重要的步骤就是将函数库中相应的代码组合到目标文件中。
  命令:gcc hello.o -o hello
备注:以上命令及参数只对输出文件约束,对输入文件向上包含。
   即链接操作gcc hello.c -o hello可以直接将c源程序经过'预处理-编译-汇编-链接'生成hello可执行文件。
 
优化程序选项:
   优化级别分3级,由高到低分别为:-O3、-O2、-O1
 
告警和出错选项:

-ansi

支持符合ANSI标准的C程序

-pedantic

允许发出ANSI C标准所列的全部警告信息

-pedantic-error

允许发出ANSI C标准所列的全部错误信息

-w

关闭所有告警

-Wall

允许发出Gcc提供的所有有用的报警信息

-werror

把所有的告警信息转化为错误信息,并在告警发生时终止编译过程

 

最新文章

  1. CSS 3学习——box-sizing和背景
  2. angular.extend用法实例
  3. filter_input() 函数
  4. SpringMVC——form标签的使用
  5. MIFARE系列1《MIFARE简介》
  6. ecshop---京东手机模板js的eval产生冲突的解决方法。
  7. 索引时利用K-邻近算法过滤重复歌曲
  8. centos6.5设备mysql5.6
  9. MIPI CSI-2规范一——概述及层级
  10. python修改注册表
  11. JDK和tomcat的安装配置
  12. linux C中调用shell命令和运行shell脚本
  13. 将代码上传版本库gitee
  14. 多线程校验url的种种。。。
  15. P2010 回文日期 题解
  16. angular 中自己常用的下拉框获取值方法
  17. <table>标签总结(colspan跨列 ,rowspan跨行)
  18. scratch如何获取透明的图片
  19. Golang Email
  20. [穷尽]ADO.NET连接字符串

热门文章

  1. 第十六篇 .NET高级技术之序列化
  2. 51Nod 1013 3的幂的和(快速幂+逆元)
  3. django_models表设计
  4. 转 Oracle中merge into的使用
  5. 使用json传输数组实例
  6. ABP教程(四)- 开始一个简单的任务管理系统 - 实现UI端的增删改查
  7. 浏览器上传文件,存到oracle数据库示例。
  8. asp.net 中文部分显示问号
  9. React-Native 开发问题整理
  10. vue利用计算属性做(展开收起)小例子