GCC Linux

17 Mar 2025 | 6 分钟阅读

在 Linux 中,GCC 代表 GNU Compiler Collection。它是一个用于各种编程语言的编译器系统。它主要用于编译 C 和 C++ 程序。它将源程序名称作为必需参数;其余参数是可选的,例如调试、警告、目标文件和链接库。

GCC 是 GNU 工具链的核心组件。各种开源项目都使用 GCC 编译,例如 Linux 内核和 GNU 工具。

它以 GPL (General Public License) 发布。第一个版本 GCC 1.0 于 1987 年发布。它最初只用于 C 编程语言,但在同年,它被扩展到 C++ 编程语言。后来,它被开发用于其他编程语言,例如 Objective-C、Objective-C++、Fortran、Java、Ada、Go 等。其最新版本对编程语言的实现进行了大量改进。

它是 GNU 操作系统的官方合作伙伴;因此,它已被 Linux 基于系统的标准编译器所采用。

GCC 的组件

GCC 是一个可移植工具,它可以在许多操作系统上运行。此外,它可以通过使用 Cygwin、MinGW 和 MinGW-W64 等工具移植到 Windows。由于它是 GNU 工具链的关键组件,它包含以下用于开发应用程序和操作系统的组件

GNU Compiler Collection (GCC): 这是一个用于多种语言的编译器套件,例如 C/C++ 和 Objective-C/C++。

GNU Make: 这是一个自动化工具,用于编译和构建应用程序。

GNU Binutils: 这是一个包含二进制实用工具的套件,例如链接器汇编器

GNU Debugger (GDB)。 它用于调试应用程序。

GNU Autotools: 这是一个构建系统,包含一些实用工具,例如 Autoconf、Autoheader、Automake 和 Libtool。

GNU Bison: 它是一个像 lex 和 yacc 一样的解析器生成器。

GCC 编译过程

GCC 通过以下四个步骤编译并生成可执行程序

GCC Linux

预处理: 在此步骤中,GNU 预处理器 (cpp.exe) 创建一个包含源代码的中间文件。预处理器包括头文件 (#include) 并扩展宏 (#define)。考虑以下命令

上述命令将创建一个中间文件 'hello.i'。

编译: 在此步骤中,预处理过的源代码被编译成特定处理器的汇编代码。

上述命令将创建一个汇编文件 'hello.s'。'-s' 选项用于指定生成汇编代码而不是目标代码。

汇编: 汇编代码被转换为机器代码。它将创建一个目标文件 'hello.o'。

链接: 链接器 (ld.exe) 是编译器过程的最后一步。它将目标代码与库代码链接并生成一个可执行文件。

上述命令将创建一个可执行文件 'hello.exe'。

在 Linux 上安装 GCC

默认情况下,它随大多数 Linux 发行版一起提供。我们可以通过执行以下命令来验证它

上述命令将显示已安装的 GCC 工具版本。如果未安装,请按照以下步骤安装它

步骤 1:更新包列表。

要更新包列表,请执行以下命令

它将要求输入系统管理密码,输入密码。它将开始更新系统包。考虑下面输出的截图

GCC Linux

步骤 2:安装 build-essential 包。

它包含各种包,例如 gcc、g++ 和 make 实用程序。执行以下命令安装它

上述命令将安装 GCC 实用程序所需的包。现在,我们可以在我们的机器上使用 GCC 实用程序。考虑下面输出的截图

GCC Linux

步骤 3:验证安装。

要验证安装,请执行 gcc -version 命令,如下所示

它将显示已安装的 GCC 实用程序版本。要显示有关版本的更具体详细信息,请使用 '-v' 选项。考虑以下输出

GCC Linux

在这里,我们已成功安装 GCC 实用程序。让我们了解如何使用它。我们将使用 GCC 创建并执行一些 C 程序。

通过 gcc 运行第一个 C 程序

创建一个基本的 C 程序 "Hello world!"。创建一个文件 'hello.c' 并将以下代码放入其中

现在,编译 hello.c 如下

如果我们直接运行 hello.c,它会抛出错误。使其可执行,Linux 系统的默认可执行文件是 a.out。要执行该文件,请执行 chmod 命令如下

现在,运行 C 程序如下

考虑下面的输出

GCC Linux

GCC 命令示例

一些有用的 gcc 命令示例如下

  • 指定目标文件名称

默认情况下,gcc 命令将目标文件创建为 'a.out'。如果您想更改默认输出文件名称,请使用 '-o' 选项。

让我们执行基本的 gcc 命令

上述命令将生成目标文件 'a.out'。要指定目标文件名称,请执行命令如下

它将生成输出文件 'hello'。考虑以下输出

GCC Linux
  • 启用所有警告

要启用输出中的所有警告,请在 gcc 命令中使用 '-Wall' 选项。让我们在 hello.c 的主函数中创建一个变量。考虑以下代码

hello.c

如果我们使用 -Wall 选项编译上述代码。它将抛出警告。执行以下命令编译文件

上述命令将显示警告。考虑以下输出

GCC Linux
  • 生成编译过程的逐步输出

我们只能生成编译过程的逐步输出。

生成预处理器输出

我们可以通过使用 '-E' 选项生成预处理输出。考虑以下命令

从上述命令中,生成了一个包含预处理输出的文件 'hello.i'。考虑以下输出

GCC Linux

生成汇编代码

要生成汇编代码,请执行带 '-S' 选项的命令。考虑以下命令

上述命令将生成包含汇编代码的 'hello.s' 文件。考虑以下输出

GCC Linux

生成已编译代码

我们可以通过使用 '-C' 选项生成已编译代码。考虑以下命令

上述命令将生成一个文件 'a.out',其中仅包含机器代码或已编译代码。考虑以下输出

GCC Linux

生成编译过程的所有中间文件

我们可以通过使用 '-save-temp' 选项生成编译过程的所有中间文件。考虑以下输出

上述命令将一次性生成所有中间文件以及可执行文件。考虑以下输出

GCC Linux
  • 详细打印输出。

我们可以显示 gcc 命令执行的每个步骤的详细信息。为此,请执行带 '-v' 选项的命令。

考虑下面的输出截图:

GCC Linux

我们已经讨论了 gcc 命令的一些最有用的示例。由于 gcc 命令提供了大量的选项,您在使用它时可能会遇到困难。让我们看看如何通过终端自行获取帮助。

GCC 手册

如果您在使用 gcc 命令时遇到困难,您可以从终端获取帮助。要从命令行访问手册,请执行 man 命令如下

上述命令将显示手册,其中包含描述和支持选项列表以及简要说明。考虑下面输出的截图

GCC Linux

您可以滚动输出以阅读更多内容。按 'h' 键获取帮助,按 'q' 键退出手册并返回终端。


下一个主题Linux I/O 重定向