gcc编译详解
2024-09-07 05:03:29
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 |
把所有的告警信息转化为错误信息,并在告警发生时终止编译过程 |
最新文章
- CSS 3学习——box-sizing和背景
- angular.extend用法实例
- filter_input() 函数
- SpringMVC——form标签的使用
- MIFARE系列1《MIFARE简介》
- ecshop---京东手机模板js的eval产生冲突的解决方法。
- 索引时利用K-邻近算法过滤重复歌曲
- centos6.5设备mysql5.6
- MIPI CSI-2规范一——概述及层级
- python修改注册表
- JDK和tomcat的安装配置
- linux C中调用shell命令和运行shell脚本
- 将代码上传版本库gitee
- 多线程校验url的种种。。。
- P2010 回文日期 题解
- angular 中自己常用的下拉框获取值方法
- <;table>;标签总结(colspan跨列 ,rowspan跨行)
- scratch如何获取透明的图片
- Golang Email
- [穷尽]ADO.NET连接字符串