在如今,程序员所编写的代码实际上是基于“高级语言”所产生的以英文为基准的易于人理解的程序字段。但是对于计算机来说,其能理解的仅有“0”与“1”两种状态,计算机能识别的仅含0与1的代码语言被称为“低级语言”。所以,如果要执行高级语言,则我们需要一个工具来将程序员编写的高级语言代码转化为计算机所能识别的二进制的低级语言0、1代码。实现此功能的工具便是编译器。
程序文件的编译过程 / 编译器工作过程
要将一个高级语言程序转变成机器能识别的二进制程序需要经历四个阶段:预处理、编译、汇编、链接
GCC,全称为 GNU Compiler Collection。其为基于GNU(一种操作系统,但实际上其并未发展成一个完善的操作系统,其内核尚未被发展完善,通常其使用Linux内核作为其替代解决方案。其上搭载的内容软件完全以GPL的开源自由方式发布。)开发的一个编程编译套装,由于GNU的开源特性,因此GNU拥有着非常多的开源自由软件。基于开源自由原则而诞生Linux系统借用着GNU的开源自由组件,其中便包括了GCC这一组件。尽管其原本目的是为了编译C语言所产生的的程序文件,但是随着GCC的发展,其现在能够支持不同种语言的编译编程。
GCC的主要特征:
1.可移植、交叉编译:可移植编译器,支持多种硬件平台,支持跨平台交叉编译。
(对于不同的芯片架构: ARM、x86等等,其对应的所能理解的二进制码规范不同,GCC的交叉编译特性为我们解决了这一问题)
2.支持不同种高级语言:GCC支持解析不同的编程语言
3.支持可拓展:GCC能支持加入新语言与新CPU架构
4.开源自由:GCC是一个开源自由软件,可以免费试用
GCC的优点:
1.支持java、ADA、FORTRAN等多种不同的高级语言
2.支持多平台交叉编译
3.GCC很流行,所有的Linux系统都会广泛的使用或捆绑。
4.GCC基于C语言,原始高效
GCC的缺点:
1.GCC的源代码耦合度非常高,很难进行独立或者模块化的拆分,模块化调用GCC很困难。
2.如上,因为GCC很难被模块化独立分离出来,因此很难被作为API集成到其他工具中。
3.从1987年发展到2022年这35年,越是后期的版本,代码的质量越差。
4.GCC源码大约有1500万行代码,是现存最大的自由程序之一。
Linux中的GCC:
我使用的是Ubuntu系统,一般情况下其内已经具有gcc编译器,若没有,则执行以下代码来进行安装:
sudo apt install gcc
使用以下代码来查询当前Linux系统搭载的gcc版本:
gcc -v
可以看到在Target一栏,编译器的对应架构为x86_64-linux-gnu,也就是说这个编译器对标x86的芯片架构。在这里我们就可以明白,对于不同架构的芯片,其gcc版本也应是不同的。