使用 LLVM 19.1.7 Toolset
安装和使用 LLVM 19.1.7 Toolset
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 在顶部导航栏中点 Create
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 LLVM Toolset 复制链接链接已复制到粘贴板!
LLVM Toolset 是 Red Hat Enterprise Linux (RHEL)上的开发人员的一个红帽产品。它提供了 LLVM 编译器基础架构框架、Clang 编译器和 C++ 语言的 Clang 编译器、LLDB 调试器以及用于代码分析的相关工具。
LLVM Toolset 作为 RHEL 8 模块以及 RHEL 9 和 10 的软件包提供。
1.1. LLVM Toolset 组件 复制链接链接已复制到粘贴板!
| Name | 版本 | 描述 |
|---|---|---|
| clang | 19.1.7 | C++ 和 C++ 的 LLVM 编译器前端。 |
| lldb | 19.1.7 | 使用 LLVM 的部分的 C 和 C++ 调试器。 |
| compiler-rt | 19.1.7 | LLVM 和 Clang 的运行时库。 |
| llvm | 19.1.7 | 模块化和可重复使用的编译器和工具链技术的集合。 |
| libomp | 19.1.7 | 一个库,用于并行编程使用 Open MP API 规格。 |
| lld | 19.1.7 | LLVM 链接器。 |
| python-lit | 19.1.7 | LLVM 和 Clang 测试套件的软件测试工具。 |
CMake 构建管理器不是 LLVM Toolset 的一部分。Cmake 在系统存储库中提供。有关如何安装 CMake 的更多信息,请参阅安装 CMake 构建管理器。
1.2. LLVM 工具集兼容性 复制链接链接已复制到粘贴板!
LLVM Toolset 在以下构架中为 Red Hat Enterprise Linux 提供:
- AMD 和 Intel 64 位
- 64-bit ARM
- IBM Power Systems, Little Endian
- 64-bit IBM Z
1.3. 安装 LLVM Toolset 复制链接链接已复制到粘贴板!
完成以下步骤以安装 LLVM Toolset,包括所有依赖软件包。
先决条件
- 已安装所有可用的 Red Hat Enterprise Linux 更新。
流程
安装 LLVM 工具集:
在 RHEL 8 中,请输入:
# yum module install llvm-toolset在 RHEL 9 和 10 中,输入:
# dnf install llvm-toolset
要同时安装 LLDB debugger 和
python3-lit软件包,请输入:# dnf install lldb python3-lit
1.4. LLVM Toolset 文档 复制链接链接已复制到粘贴板!
有关官方 LLVM Toolset 文档,请参阅上游文档。
llvm-doc 软件包仅提供上游文档的引用。
1.5. 安装 CMake 构建管理器 复制链接链接已复制到粘贴板!
CMake 构建管理器是一个独立于您的编译器管理源代码的构建过程的工具。C make 可以生成原生构建环境来编译源代码、创建库、生成打包程序和构建可执行文件。
完成以下步骤以安装 CMake 构建管理器。
先决条件
流程
安装
CMake:# yum install cmake
1.6. 安装 CMake 文档 复制链接链接已复制到粘贴板!
您可以在本地系统上安装 CMake 构建管理器的文档。
先决条件
流程
安装
cmake-doc软件包:# dnf install cmake-doc
验证
-
在同一个主机上安装的浏览器中,打开
/usr/share/doc/cmake/html/index.html。
第 2 章 Clang 编译器 复制链接链接已复制到粘贴板!
clang 是基于 C 语言 C、C++、目标 C/C++、OpenCL 和 Cuda 的 LLVM 编译器前端。
LLVM Toolset 与 Clang 19.1.7 一起发布。
要编译 C++ 程序,请使用 clang++ 而不是 clang。
2.1. 先决条件 复制链接链接已复制到粘贴板!
2.2. 编译源文件 复制链接链接已复制到粘贴板!
使用 Clang 编译器编译源文件和装配语言源文件。clang 会创建一个可执行的二进制文件,作为编译的结果。要能够调试代码,请通过在 Clang 命令中添加 -g 标志来启用调试信息。
要编译 C++ 程序,请使用 clang++ 而不是 clang。
流程
编译程序:
$ clang -g -o <binary_file> <source_file>将
<binary_file> 替换为您的输出文件的名称,将<source_file> 替换为源文件的名称。
2.3. 运行程序 复制链接链接已复制到粘贴板!
Clang 编译器会创建一个可执行的二进制文件,作为编译的结果。完成以下步骤以运行程序。
先决条件
流程
要运行安装程序,请在包含可执行文件的目录中输入:
$ ./<binary_file>将
<binary_file> 替换为您的可执行文件的名称。
2.4. 将目标文件连接在一起 复制链接链接已复制到粘贴板!
通过将目标文件连接在一起,您只能编译包含更改的源文件,而不是整个项目。
当您使用由多个源文件组成的项目时,请使用 Clang 编译器为每个源文件编译目标文件。下一步,将这些目标文件链接到一起。clang 会自动生成包含您链接的对象文件的可执行文件。编译后,将目标文件重新链接在一起。
要编译 C++ 程序,请使用 clang++ 而不是 clang。
流程
将源文件编译到目标文件中:
$ clang -o <object_file> -c <source_file>将
<object_file> 替换为您的对象文件的名称,将<source_file> 替换为源文件的名称。将目标文件连接在一起:
$ clang -o <output_file> <object_file_0> <object_file_n>将
<output_file> 替换为输出文件的名称,将 <object_file> 替换为您要链接的对象文件的名称。重要目前,某些库功能被静态链接到使用 LLVM Toolset 构建的应用程序,以支持它们在多个 Red Hat Enterprise Linux 版本上执行。这会产生一个小的安全风险。如果您需要因为这个风险而重建应用程序,红帽会发出一个安全勘误。
不要静态链接您的整个应用程序。
第 3 章 LLDB debugger 复制链接链接已复制到粘贴板!
LLDB debugger 是调试 C 和 C++ 程序的命令行工具。使用 LLDB 检查被调试的代码中的内存,控制代码的执行状态,并检测代码的特定部分的执行。
LLVM Toolset 与 LLDB 19.1.7 一起分发。
3.1. 先决条件 复制链接链接已复制到粘贴板!
- LLVM Toolset 已安装。
您的编译器被配置为创建调试信息。
有关配置 Clang 编译器的说明,请参阅 Clang Compiler User Manual 中的 控制 调试信息。
有关配置 GCC 编译器的说明,请参阅 Red Hat Developer Toolset 用户指南中的 为调试准备程序。
3.2. 启动调试会话 复制链接链接已复制到粘贴板!
使用 LLDB 启动交互式调试会话。
流程
在您要调试的程序上运行 LLDB:
$ lldb <binary_file>将
<binary_file> 替换为编译的程序的名称。您已在交互模式中启动 LLDB 调试会话。您的命令行终端现在显示默认提示(
lldb)。退出调试会话并返回到 shell 提示符:
(lldb) quit
3.3. 在调试会话中执行程序 复制链接链接已复制到粘贴板!
使用 LLDB 在调试会话期间执行您的程序。当达到第一个断点、发生错误或程序终止时,程序的执行会停止。
先决条件
流程
执行您要调试的程序:
(lldb) run或者,使用特定参数执行您要调试的程序:
(lldb) run <argument>将 <argument> 替换为您要使用的命令行参数。
3.4. 使用断点 复制链接链接已复制到粘贴板!
使用断点在源代码中的集合点暂停程序的执行。
先决条件
流程
要在特定行中设置一个新的断点,请输入:
(lldb) breakpoint set --file <source_file_name> --line <line_number>将
<source_file_name> 替换为源文件的名称,将 <line_number> 替换为您要设置断点的行号。要在特定功能上设置断点,请输入:
(lldb) breakpoint set --name <function_name>-
将
<function_name> 替换为您要在其中设置断点的功能的名称。
-
将
要显示当前设置断点列表,请输入:
(lldb) breakpoint list要删除断点,请运行:
(lldb) breakpoint clear -f <source_file_name> -l <line_number>-
将
<source_file_name> 替换为源文件的名称,将 <line_number> 替换为您要删除的断点的行号。
-
将
要在达到断点后恢复程序的执行,请输入:
(lldb) continue要跳过特定数量的断点,请输入:
(lldb) continue -i <breakpoints_to_skip>-
将
<breakpoints_to_skip> 替换为您要跳过的断点数。要跳过一个循环,将 <breakpoints_to_skip> 设置为与循环迭代计数匹配。
-
将
3.5. 逐步浏览代码 复制链接链接已复制到粘贴板!
您可以使用 LLDB 单步调试程序代码,使其仅在行指针后执行一行代码。
先决条件
流程
- 将行指针设置为您要执行的行。
输入:
(lldb) step
3.6. 列出源代码 复制链接链接已复制到粘贴板!
在运行调试的程序之前,LLDB 调试器会自动显示源代码的前 10 行。每次程序执行停止时,LLDB 会显示其停止及其周围行的源代码行。您可以使用 LLDB 在调试会话过程中手动触发源代码显示。
先决条件
流程
要列出您要调试的程序源代码的前 10 行,请输入:
(lldb) list(lldb) list <source_file_name>:<line_number>将
<source_file_name> 替换为源文件的名称,将 <line_number> 替换为您要显示的行数。
3.7. 显示当前程序数据 复制链接链接已复制到粘贴板!
LLDB debugger 对任何复杂性、任何有效的表达式和函数调用返回值提供数据。您可以使用 LLDB 显示与程序状态相关的数据。
先决条件
流程
显示特定变量、表达式或返回值的当前值:
(lldb) print <data_name>将
<data_name> 替换为您要显示的数据。
第 4 章 使用 LLVM Toolset 的容器镜像 复制链接链接已复制到粘贴板!
您可以使用容器文件在 Red Hat Universal Base Images (UBI)容器上构建自己的 LLVM Toolset 容器镜像。
4.1. 使用 LLVM Toolset 创建自定义基于 UBI 的容器 复制链接链接已复制到粘贴板!
LLVM Toolset 软件包是 Red Hat Universal Base Images (UBIs)存储库的一部分。要保持容器镜像大小小,请只安装单个软件包而不是整个 LLVM Toolset。
先决条件
- 现有容器文件。有关创建 Containerfiles 的详情,请参考 Dockerfile 参考 页面。
流程
要创建包含 LLVM Toolset 的容器镜像,请将以下内容添加到容器文件中:
对于基于 RHEL 8 的镜像,请输入:
FROM registry.access.redhat.com/ubi8/ubi:latest RUN yum module install -y llvm-toolset对于基于 RHEL 9 的镜像,请输入:
FROM registry.access.redhat.com/ubi9/ubi:latest RUN yum install -y llvm-toolset对于基于 RHEL 10 的镜像,请输入:
FROM registry.access.redhat.com/ubi10/ubi:latest RUN yum install -y llvm-toolset
第 5 章 LLVM Toolset 19.1.7 中的更改 复制链接链接已复制到粘贴板!
RHEL 与 LLVM Toolset 版本 19.1.7 一起发布。
LLVM 编译器的显著变化:
- LLVM 现在使用 debug 记录,一个用于调试信息的更高效的表示。
Clang 的显著更新:
- C++14 大小的重新分配现在默认启用。
- C++17 支持已完成。
- 添加了对 C++20 支持的改进,特别是围绕模块、概念和类模板参数推导(CTAD)。
- 添加了对 C++23、C++2c、C23 和 C2y 支持的改进。
如需更多信息,请参阅 LLVM 发行注记 和 Clang 发行注记。
LLVM Toolset 是一个滚动应用程序流,只支持最新版本。如需更多信息,请参阅 Red Hat Enterprise Linux 应用程序流生命周期 文档。