文章目录

  • 1、 GCC 主要软件包
  • 2、 GCC 编译过程
    • 2.1 GCC 编译过程
    • 2.2 GCC 单步完成编译
  • 3、GCC 常用 选项和参数
  • 4、C/C++ 程序 常用文件名后缀
  • 5、 链接 可分为 动态链接 和 静态链接

GCCGNU Compiler CollectionGNU编译器套件),是由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.chello(或a.out)文件,必须历经hello.ihello.shello.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:gccg++-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,3
O0没有优化,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编译器套件)相关推荐

  1. linux编译器下载地址,GNU Compiler Collection(gcc编译器) v4.9.1 linux版

    授权方式:免费软件 软件类型:国产软件 软件语言:简体中文 软件大小:85.5 MB 推荐星级: 软件厂商:Home Page 更新时间:2019-03-28 16:36 网友评论:0  条 运行环境 ...

  2. linux系统下载编译器,linux gcc编译器下载 GNU Compiler Collection(gcc编译器) v4.7.0 for linux版 下载-脚本之家...

    GNU Compiler Collection是一款linux版的gcc编译器软件.GNU Compiler Collection是一套以GPL及LGPL许可证所发行的自由软件,也是GNU计划的关键部 ...

  3. linux系统下载编译器,gcc for linux|GNU Compiler Collection(gcc编译器)下载v4.9.1 linux版 - 欧普软件下载...

    GNU Compiler Collection简称GCC编译器,基于Linux系统推出的一款功能强大的编译器,主要用于编译C, C++, Objective-C, Fortran, Java等语言,小 ...

  4. Using the GNU Compiler Collection 目录翻译

    文章目录 Introduction 1 Programming Languages Supported by GCC 2 Language Standards Supported by GCC 2.1 ...

  5. gcc (GNU编译器套件)

    2019独角兽企业重金招聘Python工程师标准>>> GNU编译器套件(GNU Compiler Collection)包括 C. C++. Objective-C. Fortra ...

  6. 【Linux-GNU编译器套件(gcc/g++/gfortran)离线编译安装】

    文章目录 Linux-centos7.9系统GNU编译器套件(gcc/g++/gfortran)离线编译安装 一.★GNU编译器套件定义 二.★GNU-GCC编译环境说明 三.★GNU-GCC编译安装 ...

  7. 转:GCC,LLVM,Clang编译器对比

    GCC,LLVM,Clang编译器对比 转自: http://www.cnblogs.com/qoakzmxncb/archive/2013/04/18/3029105.html 在XCode中,我们 ...

  8. GCC——C compiler

    持续更新中,最近更新:2021/2/20 文章目录 1 C compilers 1.1 from wikipedia 1.1.1 挑几个常用的 1.1.2 全量的 2 GCC--GNU Compile ...

  9. AArch64下编译GNU10编译器套件

    AArch64下编译最新版本GNU编译器套件 一.准备好依赖和GNU源码 二.编译过程 一.准备好依赖和GNU源码 以下是相关依赖,具体的版本号,可自行选择. bison-3.0.4.tar.xz f ...

最新文章

  1. cmake, This may result in binaries being created in the wrong place
  2. 图的两种遍历算法——BFS和DFS
  3. pdf导入ps颜色太浅_分享五个免费的pdf转换器,你更想选择哪一款?
  4. Winforn中怎样在窗体中打开另一个窗体
  5. SQL中left join、right join、inner join的区别
  6. c修改datatable单元格的值_神奇的VBA编程:批量拆分单元格数据
  7. 如何使用 SAP API Portal Policy Editor 给 SAP API 调用自动添加认证信息
  8. 13.JAVA之GUI编程将程序打包jar
  9. idea设置提示重复代码下去掉波浪线
  10. PIC单片机开发环境搭建
  11. c++循环输入一个字符可录入空格和换行_如何快速录入数据?
  12. linux ab 命令参数,linux环境中ab命令简介及结果分析
  13. #879273#基于django/neo4j的通讯录与QQ好友关系管理系统
  14. AcWing 4487. 最长连续子序列 单调栈上二分 数组模拟栈的好处
  15. 企业微信和个人微信的区别
  16. C端和B端的差异分析
  17. 基于 Matlab 的通信系统仿真――数字通信大作业
  18. 深入软件测试(vi)
  19. 汽车之家汽车品牌Logo信息抓取 DotnetSpider实战[三]
  20. Excel cannot open the file ~$Book.xltx

热门文章

  1. 阿里云的手机短信验证
  2. 菜鸟怎样把U盘制作成系统启动盘,并且可以放两个系统,一个win7,另一个xp系统。
  3. 不止是贵,iPhoneXS的大杀器A12 Bionic透露了苹果正在布的“一盘棋”
  4. ​一季度区块链应用报告:金融、政务仍是主战场,应用向更多行业开枝散叶...
  5. python中wraps是什么意思_Python的wraps修饰器详解
  6. mysql更新时间戳_MySQL timestamp自动更新时间分享
  7. 自己动手编译播放器MPC-HC的源码
  8. AI创作——disco diffusion入门使用
  9. Crescendo for Mac(音乐记谱软件)
  10. 基于VS2017+OpenCV3.4.1的PC端摄像头卡通化和皮肤变换