AL2023 中的 C、C++ 和 Fortran - Amazon Linux 2023
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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 可以同时安装在同一系统上。默认的 gccg++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= 标志请求时,提供了显著改进的语言特性支持、更好的优化、增强的诊断信息以及对新标准更完整的实现。