GCC(GNU Compiler Collection,GNU编译器套件)



GCCGNU Compiler CollectionGNU编译器套件),是由GNU开发的编程语言编译器

GNU项目始于1987年,是一个开发大量免费UNIX软件的集合(GNU的意思是 GNU’s Not UNIX,即GNU不是UNIX)。GNU编译器集合(GCC,其中包含GCC C编译器)是该项目的产品之一。

1、 GCC 主要软件包

序号名称功能描述
1cppC预处理器
2gccC编译器
3g++C++编译器
4gccbug创建BUG报告的Shell脚本
5gcov覆盖测试工具,用于分析在程序的哪个位置做优化效果最佳
6libgccGCC运行库
7libstdc++标准C++库
8libsupc++提供支持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)

序号命令描述
1gcc -E hello.c -o hello.i预处理(预处理器 Preprocessor:cpp-E:只对文件进行预处理,不编译汇编和链接)
2gcc -S hello.i -o hello.s编译(编译器 Compiler:gccg++-S:只对文件进行编译,不汇编和链接)
3gcc hello.s -o hello.o汇编(汇编器 Assembler:as)
4gcc 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_fileoutput_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.cC源码,必须经过预处理
3.C .cc .cppC++源码,必须经过预处理
4.hC/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文件。

  • 25
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值