本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AL2023 中的 C、C++ 和 Fortran
AL2023 包含 GNU 编译器集合 (GCC) 以及用于 LLVM(低级虚拟机)的 Clang 前端。
GCC 的主要版本在 AL2023 的整个生命周期中将保持不变。其次要版本带有错误修复,可能包含在 AL2023 版本中。其他错误、性能和安全修复可能会向后移植到 AL2023 附带的 GCC 的主要版本中。
AL2023 包含版本 11 的 GCC 作为默认编译器,带有 C (gcc)、C++ (g++) 和 Fortran (gfortran) 前端。此外,AL2023 提供版本 14 的 GCC 作为可选的替代编译器,可与默认版本一起安装。
AL2023 未启用 Ada (gnat)、Go (gcc-go)、Objective-C 或 Objective-C++ 前端。
构建 AL2023 RPM 时使用的默认编译器标志包括优化和强化标志。要使用 GCC 构建您自己的代码,我们建议您包含优化和强化标志。
注意
调用 gcc --version 时,会显示一个版本字符串,例如 gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4)。Red Hat 指的是 Amazon Linux GCC 软件包所基于的 GCC 供应商分支gcc --help 显示的错误报告 URL,所有错误报告和支持请求均应指向 Amazon Linux。
有关此供应商分支中一些长期变更(例如 __GNUC_RH_RELEASE__ 宏)的更多信息,请参阅 Fedora 程序包源码
有关核心工具链的更多信息,请参阅 Core 工具链软件包 glibc、gcc、binutils。
有关 AL2023 及其与其他 Linux 发行版关系的更多信息,请参阅 与 Fedora 的关系。
有关 AL2023 与 AL2 相比编译器三元组变更的更多信息,请参阅 编译器三元组。
GCC 14
AL2023 提供 GCC 14 作为可选编译器,可与默认的 GCC 11 一起安装。GCC 14 包含最新的语言特性和优化,适用于需要较新 C、C++ 或 Fortran 标准支持的项目。
要安装 GCC 14,请使用以下命令:
sudo dnf install gcc14 gcc14-c++ gcc14-gfortran
GCC 14 编译器安装时使用特定于版本的命令名称,以避免与默认的 GCC 11 冲突:
gcc14-gcc:C 编译器gcc14-g++:C++ 编译器gcc14-gfortran:Fortran 编译器
示例用法:
gcc14-gcc -o myprogram myprogram.c gcc14-g++ -o mycppprogram mycppprogram.cpp gcc14-gfortran -o myfortranprogram myfortranprogram.f90
您可以通过运行以下命令验证安装的版本:
gcc14-gcc --version
这将显示类似以下的版本信息:gcc14-gcc (GCC) 14.2.1 20250110 (Red Hat 14.2.1-7)
注意
GCC 11 和 GCC 14 可以同时安装在同一系统上。默认的 gcc、g++ 和 gfortran 命令将继续使用 GCC 11,而 GCC 14 通过特定于版本的命令访问。
语言标准版本比较
下表比较了不同 Amazon Linux 版本和 GCC 编译器版本的默认语言标准版本:
| Amazon Linux 版本 | C 标准(默认) | C++ 标准(默认) | Fortran 标准 |
|---|---|---|---|
| AL2 附带 GCC 7(默认) | C11(201112L) | C++14(201402L) | Fortran 2008 |
| AL2 附带 GCC 10(可选) | C17/C18(201710L) | C++14(201402L) | Fortran 2008 |
| AL2023 附带 GCC 11(默认) | C17/C18(201710L) | C++17(201703L) | Fortran 2008 |
| AL2023 附带 GCC 14(可选) | C17/C18(201710L) | C++17(201703L) | Fortran 2008 |
各 GCC 版本的主要改进:
-
GCC 10 对比 GCC 7:将默认 C 标准从 C11 升级到 C17/C18,增加了对 C++20 特性的支持,并改进了优化能力。
-
GCC 11 对比 GCC 10:将默认 C++ 标准从 C++14 升级到 C++17,增强了对 C++20 的支持,并增加了实验性的 C++23 特性。
-
GCC 14 对比 GCC 11:增加了完整的 C23 标准支持,增强了 C++23 特性,改进了优化,并提高了标准符合性。
支持的语言标准:
-
C 标准:所有版本均支持 C90、C99、C11 和 C17/C18。GCC 10+ 支持 C2x(C23 草案),而 GCC 14 提供完整的 C23 支持。
-
C++ 标准:所有版本均支持 C++98、C++03、C++11、C++14、C++17 和 C++20。GCC 11+ 提供实验性的 C++23 支持,GCC 14 则提供增强的 C++23 特性。
-
Fortran 标准:所有版本主要支持 Fortran 2008,并根据 GCC 版本提供不同程度的 Fortran 2018 特性支持。
注意
虽然 GCC 11 和 14 的默认标准保持一致,但 GCC 14 在显式使用 -std= 标志请求时,提供了显著改进的语言特性支持、更好的优化、增强的诊断信息以及对新标准更完整的实现。