1987 年 3 月 22 日,一个周日,Richard M. Stallman(IT界称他为 RMS)发布了GCC,并邀请其他人进行测试。在接下来的十年中,这个项目并入 EGCS 的编译器。1999 年 4 月,这些项目再次合并,成为 GNU 项目的一部分,并重新命名为 GNU 编译器套件。 GCC Steering Committee 接手管理这个项目,并定期进行更新。目前最新版本是 2021年 3 月 19 日发布的 10.2 版。
GCC 是一个工具链,用于编译代码,将代码与各种库依赖项连接,并为程序集,最后形成可执行文件。GCC 遵循标准的 UNIX 设计理念,工具简单,但效果和性能一流。GCC 开发组件利用多个分散的工具辅助软件编译。 在源代码文件上运行 GCC 时,首先,GCC 预处理头文件,并消除注释。接下来,标记代码,扩展宏,检测编译有无错误,然后准备编译。将预处理后的文件发送到编译器,编译器创建程序对象和控制流的语法树,并形成汇编代码。然后汇编器将此代码转换为系统的二进制可执行代码。最后,增加所需的外部库引用链接。最终,形成可在目标系统中执行的程序。
几乎所有的 Linux 发行版都预装了 GCC,或者在主存储库中已存有 GCC,所以安装过程很简单。Debian 发行版,如 Debian、Ubuntu 和 linuxmint,可运行“apt install build essentials”。在 RedHat 发行版,如 RedHat Enterprise Linux、Fedora、CentOS 和 Amazon Linux,则运行“yum group install‘Development Tools”。在 Arch 和 Manjaro 等 Arch 发行版上,运行“pacman-S base devel”。 macOS 用户可以使用“brew install gcc”。 有关 Windows 的安装说明,在后续小标题《GCC Windows》中为大家介绍。
GCC 为开发人员提供了丰富的功能,包括支持多种编程语言、深度代码优化和跨平台编译。了解更多 GCC 特性,请访问杜比回顾:GCC vs Clang.
使用 GCC 进行编译的过程很简单,比如: gcc hello.c -o hello 运行这个命令,处理 hello.c 文件,并生成一个名为“hello”的二进制文件。其他参数可以进一步传递。 gcc hello.c -O3 -o hello 在本例中,优化参数设置为 3,从而生成更优的代码。 其中也可以包括其他库。 gcc hello.c -lncurses -o hello 此用例包含了 ncurses 库。 更复杂的编译则由 makefile 管理,并通过“make”命令调用。
Windows 有两个选项,一是安装 WSL(Windows Subsystem for Linux),并安装所选的发行版,按照上面的说明进行操作。或者可以使用 MinGW(Minimalist GNU for Windows)发行版,该发行版可从链接获取。 WSL 选项,让 GCC 使用体验更像 Linux。现代 WSL 版本运行的是本地 Linux 系统,因此开发人员在使用此环境时,工作流程几乎没有偏差。不过 WSL 是一种虚拟化技术,因此会有一些性能成本。此外,图形程序可能不会造成性能或功能受损,因此 MinGW-W64 适合编译 GUI 软件的开发人员。
GCC 是 GNU 工具链的核心,GNU 工具链是用来编译大多数 Linux 和开源软件的开发系统。虽然有一些专业发行版省略了 GCC,但我们几乎可以在每个 Linux 系统中找到。Linux 内核本身主要是用 GCC 编译的。Linux 内核和 GNU 工具链的合作发展由来已久,以至于 Linux 生态系统通常被称为 GNU/Linux。
GCC 是能加速开发,结合 Incredibuild,GCC 速度更快。Incredibuild 通过进程虚拟化技术全马力加速进程,把每台主机变成一台拥有数百个内核的超级计算机。在 Incredibuild 的助力下,编译、测试到发布自动化的流程都可进行进一步提速,产品质量提高,速度显著加快。