GCC编译器背后的故事.pdf
需积分: 0 91 浏览量
更新于2021-10-08
收藏 148KB PDF 举报
GCC编译器是一种开源的编译工具,它支持C/C++等语言将源代码编译成处理器能够执行的二进制代码。GCC并不是孤立存在的,它的背后有一系列工具的支持,这些工具被称为Binutils。Binutils是一组二进制程序处理工具,包括addr2line、ar、objcopy、objdump、as、ld、ldd、readelf、size等,它们在开发和调试过程中起到了不可或缺的作用。例如,addr2line工具可以将程序地址转换成对应的源代码位置和函数,as工具主要用于汇编,ld工具主要用于链接,而ar工具则用于创建静态库。静态库和动态库是程序依赖的两种类型的库文件,静态库在编译时将代码载入可执行程序,而动态库的代码在运行时才载入内存,因此动态库能够节省内存。ldd命令可以查看一个可执行程序依赖的共享库,objcopy可以转换不同格式的对象文件,objdump用于反汇编,readelf用于显示ELF文件信息,size用于列出可执行文件的尺寸信息。
C运行库是C语言标准库的一部分,它包含了一系列标准头文件和函数,例如printf函数就是C标准库中的函数。C语言标准定义了C的语法和标准库函数原型,但并未提供这些函数的实现,因此C编译器通常需要C运行时库(CRT)的支持。同样,C++也有自己的标准和运行时库。
在Linux系统中,GCC编译器是开发和调试的常用工具。为了演示编译的整个过程,可以在Linux环境下创建一个工作目录,例如test0,然后用文本编辑器编写一个简单的C语言程序Hello.c。编译过程可以分为几个步骤:
1. 预处理:预处理过程包括宏定义的展开、条件预编译指令的处理、头文件的插入、注释的删除、行号和文件标识的添加以及#pragma编译器指令的保留。使用gcc命令的-E选项可以进行预处理,并生成预处理后的文件。
2. 编译:编译过程对预处理后的文件进行词法分析、语法分析、语义分析和优化,最终生成汇编代码。这一步骤是将程序转换为机器能够理解的语言的关键。
3. 汇编:汇编过程将编译器生成的汇编代码转换为机器代码,生成可重定位的目标文件。
4. 链接:链接过程将一个或多个目标文件及所需的库文件结合,生成最终的可执行文件。链接器解决程序中的符号引用,将各个部分组合在一起。
通过这个过程,程序员能够将源代码文件转换成最终可以运行的程序,这涵盖了从编写代码到程序运行的整个开发周期。GCC编译器及其相关工具的使用是软件开发流程中的重要组成部分,它们使得程序能够从源代码级别进化到机器能识别的指令级别。
加菲猫不爱吃猫粮
- 粉丝: 415
- 资源: 14
最新资源
- 机械设计大型举重机卷绳机sw17可编辑非常好的设计图纸100%好用.zip
- 机械设计单片式离合器sw20可编辑非常好的设计图纸100%好用.zip
- 英飞凌TC系列旋变软解码开发,含程序与电路
- 抖音自动点赞自动滚屏app
- 有源电力滤波器APF仿真,ip-iq谐波电流检测和无功电流检测 matlab simlink仿真 滞环控制 PI控制 很适合用于初学者学习 了解电能质量研究方向可用于电能质量相关的基础仿真控制
- mmexport1735898743184.mp4
- 项目简单,适合新手入门(飞翔的小鸟java源代码)
- 机械设计单柱巷道式堆垛机(sw16可编辑+cad)非常好的设计图纸100%好用.zip
- mmexport1735898729052.mp4
- 机械设计电脑光驱组件自动贴膜设备sw17非常好的设计图纸100%好用.zip
- comsol二维裂隙流压裂水平井
- 机械设计复合铜换热器组装机_step非常好的设计图纸100%好用.zip
- AW35616 linux驱动
- 反步法 PID(backstepping)控制算法下的USV(无人船 艇)路径跟踪控制方案(考虑洋流扰动) Norrbin Fossen模型+LOS制导+PID 反步法控制 Matlab Simuli
- 机械设计电液滑环(sw15可编辑+工程图)非常好的设计图纸100%好用.zip
- 机械设计滚轮跳动度检查step非常好的设计图纸100%好用.zip