什么是GCC

GCC

GNU Compiler Collection, GNU 编译器套件

是由 GNU 开发的 编程语言译器

GNU编译器套件, 包括 C, C++, Objective-C, Fortran, Java, Ada 和 Go语言前端, 也包括了 这些语言的库(如 libstdc++, libgc等)

GCC的初衷是为GNU操作系统专门编写的一款 编译器, GNU系统是彻底的 *软件,

GCC是以 GPL许可证所发行的 *软件, 也是 GNU计划的 关键部分,

GCC的初衷是为 GNU操作系统专门编写的一款 编译器, 现已被大多数 类Unix操作系统(如 Linux, BSD, MacOS X等) 采纳为 标准的 编译器, 甚至在 微软的 Windows上也可以使用GCC,

GCC支持多种 计算机体系结构芯片, 如x86, ARM, MIPS等, 并已被移植到其他多种硬件平台

GCC原名为 GNU C语言编译器(GNU C Complier), 只能处理C语言.

但其很快扩展, 变得可处理C++, 后来又够支持多种编程语言, 如Fortran, Pascal, Objective-C, Java, Ada, Go以及各类处理架构上的 汇编语言等,

所以改名为 GNU编译器套件(GNU Complier Collection)

1. 结构

GCC的外部接口长得像 一个标准的 Unix编译器.

使用者 在 命令列下 键入 gcc之程序名, 以及一些命令参数, 以便决定每个输入档案使用的个别语言编译器, 并为 输出程序码 使用适合此硬件平台的 组合语言编译器,

并且选择性第执行 连接器 以 制造 可执行的程序

每个语言编译器都是 独立程序, 此程序可处理输入的原始码, 并输出组合语言码.

全部的 语言编译器 都拥有 都拥有共通的 中介架构: 一个前端解析符合此语言的原始码, 并产生 一抽象语法树, 以及 一 翻译此语法树 成为 GCC的暂存器转换语言(RTL)的 后端. 编译器最佳化 与 静态程序码解析技术(例如FORTIFY_SOURCE, 一个试图发现 缓冲区溢位(buffer overflow)的 编译器), 在此阶段应用于 程序码上. 最后, 适用于 此硬件架构的 组合语言程序码 以及 Jack Davidson 与 Chris Fraser发明的 算法产出

几乎全部的 GCC 都由 C写成, 除了 Ada前端大部分以Ada写成

2. 基本用法

在使用 GCC编译器的时候, 我们必须给出一系列必要的 调用参数 和 文件名称. GCC编译器 的 调用参数 大约有100多个, 这里只介绍其中 最基本, 最常用的参数, 具体可参考 GCC Manual

GCC最基本的语法是, gcc [options] [filename]

其中 options 就是 编译器所需要的参数, filename 给出相关的 文件名称

执行过程

虽然我们称 GCC是 C语言的编译器, 但使用gcc由 C语言 源代码文件 生成 可执行文件的过程不仅仅是 编译的过程, 而是要经历四个相互关联的步骤,

预处理(也称 预编译, Preprocessing)

编译(Compilation)

汇编(Assembly)

链接(Linking)

命令gcc首先调用cpp进行预处理, 在预处理过程中, 对源代码文件中的 文件包含(include), 预编译语句(如 宏定义 define等) 进行分析,

接着调用 gcc 进行编译, 这个阶段根据 输入文件 生成 以 .i 为后缀的 目标文件,

汇编过程 是针对 汇编语言的步骤, 调用 as 进行工作, 一般来讲, .S后缀的汇编语言 源代码文件 和 汇编, .s为后缀的汇编语言文件 经过 预汇编 和 汇编之后 都生成以 .o为后缀的目标文件,

当所有的目标文件 都生成之后, gcc就调用 ld 来完成最后的 关键性工作, 这个阶段就是 连接

在连接阶段, 所有的 目标文件 被 安排在 可执行程序中 的 恰当文职, 同时, 该程序所调用的 库函数 也从各自所在的 档案库中 连到 合适的 地方

3. 安装

https://gcc.gnu.org/install/

参考链接

https://baike.baidu.com/item/gcc/17570

https://gcc.gnu.org/

https://gcc.gnu.org/onlinedocs/

上一篇:(转)AVI文件格式解析+AVI文件解析工具


下一篇:在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查