文章目录

  • 1.GCC简介
    • 1.1概念
    • 1.2 gcc与g++详解
      • 1.2.1 .主要区别
      • 1.2.2 后缀名相关
      • 1.2.3 GCC参数
  • 2 编译过程
    • 2.1 预编译
    • 2.2 编译
    • 2.3汇编
    • 2.4链接

1.GCC简介

1.1概念

1.GNU
GNU 项目创始于一九八四年,旨在开发一个类似 Unix ,且为自由软件的完整的操作系统: GNU 系统。GNU 的内核尚未完成,所以 GNU 使用 Linux 作为其内核。GNU 和 Linux 以这样的方式组合成为 GNU/Linux 操作系统,这个组合有时被错误地称为 Linux。详见:GNU
2.GCC
GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。初衷是为GNU操作系统专门编写的一款编译器。GCC开始时只能编译C语言,后来扩展到可以编译C++、java等。
3.gcc与g++
gcc是GCC中的GUN C Compiler(C 编译器),g++是GCC中的GUN C++ Compiler(C++编译器),就本质而言,gcc和g++并不是编译器,也不是编译器的集合,它们只是一种驱动器,根据参数中要编译的文件的类型,调用对应的GUN编译器而已,因此,更准确的说法是:gcc调用了C compiler,而g++调用了C++ compiler。

1.2 gcc与g++详解

1.2.1 .主要区别

参考:Stack Overflow

也就是说,g++会自动链接标准库STL,而gcc不会,但在某些情况下,gcc加上一些参数后也可以编译c++程序,例如:

1.2.2 后缀名相关

1.回顾后缀名
1)在windows中,后缀名有特定的含义,根据文件的后缀就能判断文件的类型,文件的类型是和相应的程序关联的。当我们打开某个文件时,系统会自动判断用哪个应用打开。
2)在linux中,文件后缀名没有太大的意义,主要看文件的属性有关,文件后缀一般是方便自己看的;
2)对于编译器而言,无论是linux还是windows,对于文件名都有一致的规定。
2.g++支持的后缀名
参考:官方文档
g++对文件后缀有如下要求:

C++ source files:‘.C’, ‘.cc’, ‘.cpp’, ‘.CPP’, ‘.c++’, ‘.cp’,  ‘.cxx’
C++ header files:‘.hh’, ‘.hpp’, ‘.H’,‘.tcc’(for shared template code)
此外:
It treats ‘.c’, ‘.h’ and ‘.i’ files as C++ source files instead of C
source files unless -x is used.

也就是说,我们只能使用上述文件后缀,不能使用违规的后缀,否则无法通过编译,如:

然而,可以通过-x参数使编译器直接获取语言类型,无需理会后缀名

1.2.3 GCC参数

更多参数用法
乱码问题:https://www.cnblogs.com/dan-jacky/p/6565986.html

2 编译过程

详见:参考1,参考2
分为四个部分:预编译、编译、汇编和链接。

2.1 预编译

代码:gcc -E hello.c -o hello.i
主要作用:
【1】删除#define,展开所有宏定义。例#define portnumber 3333
【2】处理条件预编译 #if, #ifdef, #if, #elif,#endif
【3】处理“#include”预编译指令,将包含的“.h”文件插入对应位置。这可是递归进行的,    文件内可能包含其他“.h”文件。
【4】删除所有注释。/**/,//。
【5】添加行号和文件标识符。用于显示调试信息:错误或警告的位置。
【6】保留#pragma编译器指令。(1)设定编译器状态,(2)指示编译器完成一些特定的动作。

2.2 编译

代码:gcc -s hello.c -o hello.s
主要作用:
【1】扫描(词法分析)
【2】语法分析
【3】语义分析
【4】源代码优化(中间语言生成)
【5】代码生成,目标代码优化。

2.3汇编

代码:gcc -c hello.c -o hello.o
主要作用:
汇编器是将汇编代码转变成可以执行的指令,生成目标文件。

2.4链接

代码:gcc hello.o -o hello
主要作用:将各个模块之间相互引用的部分正确的衔接起来。它的工作就是把一些指令对其他符号地址的引用加以修正,链接过程主要包括了地址和空间分配、符号决议和重定向。
【1】地址和空间分配
【2】符号决议:有时候也被叫做符号绑定、名称绑定、名称决议、或者地址绑定,其实
   就是指用符号来去标识一个地址。比如说 int a = 6;这样一句代码,用a来标识一个块
   4个字节大小的空间,空间里边存放的内容就是4.
【3】重新计算各个目标的地址过程叫做重定位。
最基本的链接叫做静态链接,就是将每个模块的源代码文件编译成目标文件(Linux:.o Windows:.obj),然后将目标文件和库链接形成最后的可执行文件。

GCC编译器与编译过程相关推荐

  1. gcc编译器及编译过程

    GCC编译器 GCC(GNU Compiler Collection,即 GNU 编译器套装),是一套由 GNU 开发的编程 语言编译器.它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 ...

  2. linux g 编译目录下,你真的了解Linux下gcc编译器的工作过程吗?

    小豆丁:老张!老张! 老张:干嘛? 小豆丁:咋啦?愁眉苦脸的,是不是又被媳妇给揍了? 老张:开玩笑,我在家那就是相当于老虎的存在,谁敢揍我! 媳妇:老张,你说啥?我没听清,你再说一遍? 老张:我是老虎 ...

  3. gcc -c -o编译过程

    gcc编译 分步处理 一.预处理 二.编译 三.汇编 四.链接 一步到位 多模块编译 一次性编译: 独立编译: C源文件到可执行文件共经历了4个过程.在使用GCC编译程序时,编译过程可以被细分为四个阶 ...

  4. 编译器:GNU工具链GCC编译器的编译方法和编译步骤

    https://www.runoob.com/w3cnote/working-process-of-the-compiler.html https://www.runoob.com/w3cnote/g ...

  5. 让IDA Pro输出能让gcc编译器直接编译的.s汇编文件

    Option->General->Analysis 1.Target assembler 选 GNU assembler,这样注释语句起头就是@而不是; 2.Processor speci ...

  6. C程序编译过程及常见选项--静态库和动态库

    C程序编译过程及常见选项--静态库和动态库 前言 一.gcc详讲 1.1 编译过程 1.2 预处理 1.3 编译(Compilation) 1.4 汇编(Assembly) 1.5 链接(Linkin ...

  7. 【gcc/g++】1.编译器, 编译过程和基本参数

    "木叶飞舞之处" 一, gcc编译器 二, gcc的编译过程 1--完整版 1. 预处理 2. 编译 3. 汇编 4. 链接: 2--简化版 简化编译过程 3--编译完成 三, g ...

  8. Linux下Gcc 的编译过程

    在linux下开发难免会用到gcc编译.GCC(GNU Compiler Collection.GNU编译器套装),是由 GNU 开发的编程语言编译器.它是GNU编译器套装以GPL许可证所发行的自由软 ...

  9. gcc编译器的整个工作过程

    gcc hello.c   ./a.out     或者 gcc hello.c -o hello   ./hello ./表示执行当前目录下的可执行程序或脚本程序. 首先gcc需要调用预处理程序cp ...

最新文章

  1. RoIPooling
  2. python字典输出_Python字典/循环输出
  3. 养猪砸下50亿美金-丰收节贸易会:俄罗斯最大农业巨头青岛
  4. 【转】 android sdk setup时出现:Failed to fetch URL
  5. 霍夫曼编码PHP,数据结构:哈夫曼编码(php版)
  6. ps画画模糊笔刷_如何用笔刷做出大神级效果?1000多款PS插画笔刷,简直就是你想要的神器...
  7. win10下使用mklink命令给C盘软件搬家
  8. LCD1602液晶显示设计
  9. qregexp括号匹配_qt中的正则表达式QRegExp使用大全以及匹配中括号[]方法大全
  10. 2019 计蒜之道 初赛 第一场(A. 商汤的AI伴游小精灵)
  11. uni-app 全局变量的实现
  12. Bootstrap排版之标题
  13. OO和PO的最大区别是什么?
  14. jQuery遍历对象/数组/集合
  15. Towards End-to-End Lane Detection: an Instance SegmentationApproach
  16. 子查询 navicat可视化,pymysql用法
  17. 【Android】google plus、Facebook登陆sdk集成打包出aar的使用步骤
  18. Black Hat Python3 Chapter4
  19. 制作nextcloud私人云盘
  20. 【C#】创建快捷方式

热门文章

  1. 新电脑win10 改win7 要注意
  2. 考研 英语一 大作文-图画作文 (一)----第一段描述图画写作攻略
  3. powerpc 和arm的寄存器都相同吗
  4. 人事信息管理系统part1
  5. 美国阿拉斯加大学Jeffrey T. Freymueller教授
  6. 我的10G OCP 考证历程
  7. 计算机应用大赛word题库,计算机应用基础练习题库与答案
  8. Noah-MP模型 陆面生态水文模拟与多源遥感数据同化
  9. 芯片制造过程3洁净室
  10. POJ 2245 Addition Chains(算竞进阶习题)