1.What(什么是GCC)
GCC(GNU Compiler Collection )是 Linux 下的编译工具集,包含 gcc、g++ 等编译器
2.Why(GCC的作用)
- 编译和优化: GCC包含多种编译程序(支持多种语言的编译),且提供不同级别的优化(O1、O2和O3)
- 代码诊断: 在编译过程中可检测并报告代码中的错误和警告信息,帮助开发者定位和修正问题。如使用 -Wall 选项可开启一系列常见警告,方便开发者发现潜在错误
- 跨平台编译支持: 可以为不同的硬件平台和操作系统生成目标代码,包括常见的 x86、ARM、PowerPC 等架构,以及 Linux、Windows、macOS 等操作系统
3.How(如何使用GCC)
(1)GCC工作流程
示例源文件:
预处理: 这一阶段的主要工作是:展开头文件、宏替换、去除注释行(.i,对应参数-E)
编译和优化: GCC调用对应编译语言的编译程序进行编译,得到一个汇编文件(.s,对应参数-S)
汇编: GCC调用相应的汇编器对汇编文件进行汇编,得到一个二进制文件(.o,对应参数-c)
链接: GCC对程序需要调用的库进行链接,得到一个可执行的二进制文件(.out,不需要任何参数)
(2)GCC参数介绍
| 参数 | 含义 |
|---|---|
| -E | 预处理指定的源文件,得到一个文本格式的文件.i |
| -S | 编译和优化展开后的源文件,得到一个汇编文件.s |
| -c | 汇编指定的汇编文件,生成一个二进制文件.o |
| -o | 指定输出文件的路径和名称 |
| -I | 指定include包含目录的搜索路径 |
| -L | 指定依赖库的路径 |
| -l | 指定编译时使用的库 |
| -g | 编译时生成调试信息,调试程序时必须添加该参数 |
| -D | 程序编译时指定一个宏,常用于区分调试代码 |
| -Wall | 编译时生成所有警告信息 |
| -w | 不生成任务警告信息 |
| -On | 指定编译时优化的级别,n的取值:0-3 |
| -fPIC/ -fpic | 生成位置无关的目标文件,确保代码的可重定位性 |
| -shared | 将位置无关的目标文件组合成一个动态链接库 |