GCC(GNU Compiler Collection,GNU编译器套件)
文章目录
- 1、 GCC 主要软件包
- 2、 GCC 编译过程
- 2.1 GCC 编译过程
- 2.2 GCC 单步完成编译
- 3、GCC 常用 选项和参数
- 4、C/C++ 程序 常用文件名后缀
- 5、 链接 可分为 动态链接 和 静态链接
GCC
(GNU Compiler Collection
,GNU编译器套件
),是由GNU
开发的编程语言编译器
。
GNU项目始于1987年,是一个开发大量免费UNIX软件的集合(GNU的意思是 GNU’s Not UNIX,即GNU不是UNIX)。GNU编译器集合(GCC,其中包含GCC C编译器)是该项目的产品之一。
1、 GCC 主要软件包
序号 | 名称 | 功能描述 |
---|---|---|
1 |
cpp
|
C预处理器
|
2 |
gcc
|
C编译器
|
3 |
g++
|
C++编译器
|
4 |
gccbug
|
创建BUG报告的Shell脚本
|
5 |
gcov
|
覆盖测试 工具,用于分析在程序的哪个位置做优化效果最佳
|
6 |
libgcc
|
GCC 的运行库
|
7 |
libstdc++
|
标准C++库
|
8 |
libsupc++
|
提供支持C++ 语言的函数库
|
2、 GCC 编译过程
2.1 GCC 编译过程
从hello.c
到hello
(或a.out
)文件,必须历经hello.i
、hello.s
、hello.o
,最后才得到 hello
(或a.out
)文件,分别对应着预处理
、编译
、汇编
和链接
4个步骤,整个过程如图所示:
序号 | 步骤 | 工作内容 |
---|---|---|
1 |
预处理 (Preprocess)
|
C 编译器 对各种预处理命令 进行处理,包括:(1) 展开所有的头文件 、(2) 宏定义的替换 、(3) 解析条件编译 并添加到文件中
|
2 |
编译 (Compile)
|
将预处理 后的文件进行词法分析 、语法分析 、语义分析 及优化 后,生成相应的.s 汇编文件
|
3 |
汇编 (Assemble)
|
将编译 后的汇编代码 翻译成机器码 ,生成.o 目标文件
|
4 |
链接 (Link)
|
通过链接器ld 将目标文件 和库文件 链接在一起,生成可执行文件 (executable file)
|
序号 | 命令 | 描述 |
---|---|---|
1 |
gcc -E hello.c -o hello.i
|
预处理(预处理器 Preprocessor:cpp 。-E :只对文件进行预处理 ,不编译汇编和链接)
|
2 |
gcc -S hello.i -o hello.s
|
编译(编译器 Compiler:gcc ,g++ 。-S :只对文件进行编译 ,不汇编和链接)
|
3 |
gcc hello.s -o hello.o
|
汇编(汇编器 Assembler:as)
|
4 |
gcc hello.o -o hello
|
链接(链接器 Linker:ld)
|
2.2 GCC 单步完成编译
第1种命令:gcc hello.c -o hello
第2种命令:gcc -o hello hello.c
3、GCC 常用 选项和参数
序号 | 命令 | 描述 |
---|---|---|
1 |
-c
|
只编译 ,不链接 为可执行文件,编译器 将输入的.c 文件编译为.o 的目标文件
|
2 |
-o output_file
|
output_file 用来指定 编译结束以后的输出文件名 如果 不使用 这个选项的话 GCC 默认编译出来的可执行文件 名字为a.out
|
3 |
-E
|
只对文件进行预处理 ,不编译汇编和链接
|
4 |
-S
|
只对文件进行编译 ,不汇编和链接
|
5 |
-g
|
产生符号调试工具(GNU 的 GDB)所必要的符号信息,要想对源代码 进行调试,就必须加入这个选项。g 也分等级,默认是-g2 ,-g1 是最基本的,-g3 包含宏信息
|
6 |
-O
|
对程序进行优化编译 ,如果使用此选项的话整个源代码在编译 、链接 的的时候都会进行优化 ,这样产生的可执行文件 执行效率 就高
|
7 |
-ON
|
指定代码的优化等级为N ,可取值为 0,1,2,3O0 没有优化,O3 优化级别最高
|
8 |
-O2
|
比-O 更幅度更大的优化,生成的可执行效率 更高,但是整个编译过程会很慢
|
4、C/C++ 程序 常用文件名后缀
序号 | 扩展名 | 说明 |
---|---|---|
1 |
.a
|
静态库 ,由目标文件 构成的文件库
|
2 |
.c
|
C 源码,必须经过预处理
|
3 |
.C .cc .cpp
|
C++ 源码,必须经过预处理
|
4 |
.h
|
C/C++ 源码的头文件
|
5 |
.i
|
.c 经过预处理 得到的C 源码
|
6 |
.ii
|
.C .cc .cpp 经过预处理 得到的C++ 源码
|
7 |
.s
|
汇编语言 文件,是.i 文件编译 后得到的中间文件
|
8 |
.o
|
目标 文件,是编译 过程得到的中间文件
|
9 |
.so
|
共享对象库 (shared object),也称动态库
|
5、 链接 可分为 动态链接 和 静态链接
序号 | 链接 | 描述 |
---|---|---|
1 |
动态 链接
|
使用动态库 进行链接,生成的程序在执行的时候 需要加载 所需的动态库 才能运行。动态链接 生成的程序小巧,但是必须依赖动态库 ,否则无法执行 。
|
2 |
静态 链接
|
使用静态库 进行链接,生成的程序包含程序运行 所需要的全部库 ,可以直接运行 ,不过体积较大 。
|
Linux 下的动态链接库
实际是共享目标文件
(shared object),一般是.so
文件,作用类似于 Windows 下的.dll
文件。
GCC(GNU Compiler Collection,GNU编译器套件)相关推荐
- linux编译器下载地址,GNU Compiler Collection(gcc编译器) v4.9.1 linux版
授权方式:免费软件 软件类型:国产软件 软件语言:简体中文 软件大小:85.5 MB 推荐星级: 软件厂商:Home Page 更新时间:2019-03-28 16:36 网友评论:0 条 运行环境 ...
- linux系统下载编译器,linux gcc编译器下载 GNU Compiler Collection(gcc编译器) v4.7.0 for linux版 下载-脚本之家...
GNU Compiler Collection是一款linux版的gcc编译器软件.GNU Compiler Collection是一套以GPL及LGPL许可证所发行的自由软件,也是GNU计划的关键部 ...
- linux系统下载编译器,gcc for linux|GNU Compiler Collection(gcc编译器)下载v4.9.1 linux版 - 欧普软件下载...
GNU Compiler Collection简称GCC编译器,基于Linux系统推出的一款功能强大的编译器,主要用于编译C, C++, Objective-C, Fortran, Java等语言,小 ...
- Using the GNU Compiler Collection 目录翻译
文章目录 Introduction 1 Programming Languages Supported by GCC 2 Language Standards Supported by GCC 2.1 ...
- gcc (GNU编译器套件)
2019独角兽企业重金招聘Python工程师标准>>> GNU编译器套件(GNU Compiler Collection)包括 C. C++. Objective-C. Fortra ...
- 【Linux-GNU编译器套件(gcc/g++/gfortran)离线编译安装】
文章目录 Linux-centos7.9系统GNU编译器套件(gcc/g++/gfortran)离线编译安装 一.★GNU编译器套件定义 二.★GNU-GCC编译环境说明 三.★GNU-GCC编译安装 ...
- 转:GCC,LLVM,Clang编译器对比
GCC,LLVM,Clang编译器对比 转自: http://www.cnblogs.com/qoakzmxncb/archive/2013/04/18/3029105.html 在XCode中,我们 ...
- GCC——C compiler
持续更新中,最近更新:2021/2/20 文章目录 1 C compilers 1.1 from wikipedia 1.1.1 挑几个常用的 1.1.2 全量的 2 GCC--GNU Compile ...
- AArch64下编译GNU10编译器套件
AArch64下编译最新版本GNU编译器套件 一.准备好依赖和GNU源码 二.编译过程 一.准备好依赖和GNU源码 以下是相关依赖,具体的版本号,可自行选择. bison-3.0.4.tar.xz f ...
最新文章
- cmake, This may result in binaries being created in the wrong place
- 图的两种遍历算法——BFS和DFS
- pdf导入ps颜色太浅_分享五个免费的pdf转换器,你更想选择哪一款?
- Winforn中怎样在窗体中打开另一个窗体
- SQL中left join、right join、inner join的区别
- c修改datatable单元格的值_神奇的VBA编程:批量拆分单元格数据
- 如何使用 SAP API Portal Policy Editor 给 SAP API 调用自动添加认证信息
- 13.JAVA之GUI编程将程序打包jar
- idea设置提示重复代码下去掉波浪线
- PIC单片机开发环境搭建
- c++循环输入一个字符可录入空格和换行_如何快速录入数据?
- linux ab 命令参数,linux环境中ab命令简介及结果分析
- #879273#基于django/neo4j的通讯录与QQ好友关系管理系统
- AcWing 4487. 最长连续子序列 单调栈上二分 数组模拟栈的好处
- 企业微信和个人微信的区别
- C端和B端的差异分析
- 基于 Matlab 的通信系统仿真――数字通信大作业
- 深入软件测试(vi)
- 汽车之家汽车品牌Logo信息抓取 DotnetSpider实战[三]
- Excel cannot open the file ~$Book.xltx
热门文章
- 阿里云的手机短信验证
- 菜鸟怎样把U盘制作成系统启动盘,并且可以放两个系统,一个win7,另一个xp系统。
- 不止是贵,iPhoneXS的大杀器A12 Bionic透露了苹果正在布的“一盘棋”
- ​一季度区块链应用报告:金融、政务仍是主战场,应用向更多行业开枝散叶...
- python中wraps是什么意思_Python的wraps修饰器详解
- mysql更新时间戳_MySQL timestamp自动更新时间分享
- 自己动手编译播放器MPC-HC的源码
- AI创作——disco diffusion入门使用
- Crescendo for Mac(音乐记谱软件)
- 基于VS2017+OpenCV3.4.1的PC端摄像头卡通化和皮肤变换