4.8. GCC Toolset 15
Red Hat Enterprise Linux 中的 GCC Toolset 15 为 C、C++ 和 Fortran 提供了更新的编译器和调试器。它支持通过当前功能构建、测试和优化应用程序,同时保持系统稳定性和支持。
4.8.1. GCC Toolset 15 工具和版本 复制链接链接已复制到粘贴板!
GCC Toolset 15 提供了在 RHEL 上构建和调试应用程序的开发工具的更新版本。
| Name | 版本 | 描述 |
| GCC | 15.1.1 | 便携式编译器套件,支持 C、C++ 和 Fortran。 |
| GDB | 16.3 | 命令行调试器,适用于使用 C、C++ 和 Fortran 编写的程序。 |
| binutils | 2.44 | 一组二进制工具和其他实用程序,用于检查和操作对象文件和二进制文件。 |
| annobin | 12.93 | 构建安全检查工具. |
| dwz | 0.16 | 用于优化 ELF 共享库和 ELF 可执行文件中包含的 DWARF 调试信息的工具。 |
4.8.2. GCC Toolset 15 中的 C++ 兼容性 复制链接链接已复制到粘贴板!
GCC Toolset 15 支持一系列 C++ 语言标准。默认标准是 C++17,但您可以选择其他选项,如 C++98、C++11、C++14 或实验性版本,包括 C++20、C++23 和 C++26。要选择其他标准,请在构建代码时使用适当的编译器标志。
这个兼容性信息只适用于 GCC Toolset 15 中的 GCC。
GCC Toolset 15 中的 GCC 编译器可使用以下 C++ 标准:
- C++98
- 这个语言标准包括在 GCC Toolset 15 中。使用这个标准构建的二进制文件、共享库和对象可以自由混合,无论是否使用 GCC Toolset 15、Red Hat Developer Toolset 和 RHEL 5、6、7 和 8 的 GCC 构建。
- C++11
- 这个语言标准包括在 GCC Toolset 15 中。
- C++14
这个语言标准包括在 GCC Toolset 15 中。
当使用 GCC 版本 6 或更高版本构建了使用相应标记编译的所有 C++ 对象时,支持使用 C++14 语言版本。
- C++17
这个语言标准包括在 GCC Toolset 15 中。
这是 GCC Toolset 15 的默认语言标准设置,它相当于明确使用 option
-std=gnu++17。当使用 GCC 版本 10 或更高版本构建了使用相应标记编译的所有 C++ 对象时,支持使用 C++17 语言版本。
- C++20 和 C++23, 和 C++26
这些语言标准在 GCC Toolset 15 中仅作为实验性、不稳定和不受支持的功能提供。另外,无法保证使用这些标准构建的对象、二进制文件和库的兼容性。
要启用 C++20 标准,请在 g++ 命令行中添加命令行选项
-std=c++20。要启用 C++23 标准,请在 g++ 命令行中添加命令行选项
-std=c++23。要启用 C++26 标准,请在 g++ 命令行中添加命令行选项
-std=c++26。所有语言标准均可在符合标准的变体或 GNU 扩展中找到。
当您将构建的对象与利用系统工具链 .o 或 .a 文件构建的 GCC Toolset 15 和对象结合时,使用 GCC Toolset 15 进行链接。这样可确保仅在链接时由 GCC Toolset 15 提供的较新的库功能解决。
4.8.3. GCC Toolset 15 中的 GCC 的具体信息 复制链接链接已复制到粘贴板!
- 库的静态链接
- 某些最新的库功能被静态链接到使用 GCC Toolset 15 构建的应用程序,以支持在多个 Red Hat Enterprise Linux 版本上执行。这会产生另外一个小的安全风险,因为标准的 Red Hat Enterprise Linux 勘误表不会改变这个代码。如果开发人员出于此风险而需要重建其应用,红帽将使用安全勘误对此进行沟通。
由于这种额外的安全风险,开发人员强烈建议不要出于相同的原因将整个应用程序静态链接。
- 在链接时在对象文件后指定库
在 GCC Toolset 15 中,库使用 linker 脚本链接,它们可以通过静态存档指定一些符号。这需要确保与红帽企业 Linux 的多个版本兼容。但是,链接器脚本使用对应共享对象文件的名称。因此,链接器使用与预期不同的符号处理规则,在指定对象文件选项前,在指定对象文件选项前不会识别对象文件所需的符号:
scl enable gcc-toolset-15 'gcc -lsomelib objfile.o'
$ scl enable gcc-toolset-15 'gcc -lsomelib objfile.o'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以这种方式使用 GCC Toolset 15 的库会导致 linker 错误消息
undefined reference to symbol。要防止这个问题,请按照标准链接实践操作,并在指定对象文件的选项后添加库来指定选项:scl enable gcc-toolset-15 'gcc objfile.o -lsomelib'
$ scl enable gcc-toolset-15 'gcc objfile.o -lsomelib'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个建议也适用于使用 GCC 的基本 Red Hat Enterprise Linux 版本。
4.8.4. GCC Toolset 15 中的 binutils 的具体信息 复制链接链接已复制到粘贴板!
- 库的静态链接
- GCC Toolset 15 静态将较新的库功能链接到应用程序中,以确保在多个 Red Hat Enterprise Linux 版本间的兼容性。静态链接的代码可能会带来较小的安全风险,因为安全更新需要重新构建应用程序。如果发现安全漏洞,红帽会通知开发人员通过安全公告重建受影响的应用程序。
由于这种额外的安全风险,开发人员强烈建议不要出于相同的原因将整个应用程序静态链接。
- 在链接时在对象文件后指定库
在 GCC Toolset 15 中,库使用 linker 脚本链接,这些脚本可以通过静态存档指定一些符号。这需要确保与红帽企业 Linux 的多个版本兼容。但是,链接器脚本使用对应共享对象文件的名称。因此,链接器使用与预期不同的符号处理规则,在指定对象文件选项前,在指定对象文件选项前不会识别对象文件所需的符号:
scl enable gcc-toolset-15 'ld -lsomelib objfile.o'
$ scl enable gcc-toolset-15 'ld -lsomelib objfile.o'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以这种方式使用 GCC Toolset 15 的库会导致 linker 错误消息
undefined reference to symbol。要防止这个问题,请遵循标准链接实践,并在指定对象文件的选项后指定添加库的选项:scl enable gcc-toolset-15 'ld objfile.o -lsomelib'
$ scl enable gcc-toolset-15 'ld objfile.o -lsomelib'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个建议也适用于使用 binutils 的基本 Red Hat Enterprise Linux 版本。
4.8.5. GCC Toolset 15 中的 annobin 的具体内容 复制链接链接已复制到粘贴板!
在某些情况下,由于 GCC Toolset 15 中的 annobin 和 gcc 之间的同步问题,您的编译可能会失败,并显示类似如下的错误消息:
cc1: fatal error: inaccessible plugin file opt/rh/gcc-toolset-15/root/usr/lib/gcc/_architecture_-linux-gnu/15/plugin/gcc-annobin.so expanded from short plugin name gcc-annobin: No such file or directory
cc1: fatal error: inaccessible plugin file
opt/rh/gcc-toolset-15/root/usr/lib/gcc/_architecture_-linux-gnu/15/plugin/gcc-annobin.so
expanded from short plugin name gcc-annobin: No such file or directory
要临时解决这个问题,请在插件目录中创建一个从 annobin.so 到 gcc-annobin.so 的符号链接:
进入插件目录:
cd /opt/rh/gcc-toolset-15/root/usr/lib/gcc/architecture-linux-gnu/15/plugin
$ cd /opt/rh/gcc-toolset-15/root/usr/lib/gcc/architecture-linux-gnu/15/pluginCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建符号链接:
ln -s annobin.so gcc-annobin.so
$ ln -s annobin.so gcc-annobin.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用您的系统中使用的构架替换 architecture :
-
aarch64 -
i686 -
ppc64le -
s390x -
x86_64