LLVM 15.0.7 Toolset の使用
LLVM 15.0.7 Toolset のインストールおよび使用
概要
多様性を受け入れるオープンソースの強化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
Jira からのフィードバック送信 (アカウントが必要)
- Jira の Web サイトにログインします。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある Create をクリックします。
第1章 LLVM Toolset リンクのコピーリンクがクリップボードにコピーされました!
LLVM Toolset は、Red Hat Enterprise Linux (RHEL) 上の開発者向けの Red Hat 製品です。これは、LLVM コンパイラーインフラストラクチャーフレームワーク、C 言語および C++ 言語用の Clang コンパイラー、LLDB デバッガー、コード解析の関連ツールを提供します。
Red Hat Enterprise Linux 8 では、LLVM Toolset はモジュールとして利用できます。LLVM Toolset は、Red Hat Enterprise Linux 9 のパッケージとして利用できます。
1.1. LLVM Toolset コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
以下のコンポーネントは、LLVM Toolset の一部として利用できます。
| 名前 | バージョン | 説明 |
|---|---|---|
| clang | 17.0.6 | C および C++ の LLVM コンパイラーフロントエンド。 |
| lldb | 17.0.6 | LLVM の一部を使用した C および C++ デバッガー。 |
| compiler-rt | 17.0.6 | LLVM および Clang のランタイムライブラリー。 |
| llvm | 17.0.6 | 一連のモジュールおよび再利用可能なコンパイラーおよびツールチェーン技術。 |
| libomp | 17.0.6 | 並列プログラミングに Open MP API 仕様を使用するためのライブラリー。 |
| lld | 17.0.6 | LLVM リンカー。 |
| python-lit | 17.0.6 | LLVM および Clang ベースのテストスイート用のソフトウェアテストツール。 |
CMake ビルドマネージャーは、LLVM Toolset の一部ではありません。Red Hat Enterprise Linux 8 では、CMake がシステムリポジトリーから利用できます。Red Hat Enterprise Linux 9 では、CMake がシステムリポジトリーから利用できます。CMake のインストール方法は、CMake ビルドマネージャーのインストール を参照してください。
1.2. LLVM Toolset の互換性 リンクのコピーリンクがクリップボードにコピーされました!
LLVM Toolset は、Red Hat Enterprise Linux 8 および Red Hat Enterprise Linux 9 では、以下のアーキテクチャーで利用できます。
- AMD および Intel 64 ビット
- 64-bit ARM
- IBM Power Systems、リトルエンディアン
- 64 ビット IBM Z
1.3. LLVM Toolset のインストール リンクのコピーリンクがクリップボードにコピーされました!
すべての開発ツールおよびデバッグツールと依存パッケージを含む LLVM Toolset をインストールするには、以下の手順を実行します。
前提条件
- 利用可能な Red Hat Enterprise Linux のすべての更新がインストールされている。
手順
Red Hat Enterprise Linux 8 で、以下のコマンドを実行して llvm-toolset モジュールをインストールします。
# yum module install llvm-toolset
LLDB デバッガーまたは python3-lit パッケージは Red Hat Enterprise Linux 8 にインストールされません。LLDB デバッガーと python3-lit パッケージをインストールするには、次を実行します。
# yum install lldb python3-lit
Red Hat Enterprise Linux 9 で、以下のコマンドを実行して llvm-toolset パッケージをインストールします。
# dnf install llvm-toolset
LLDB デバッガーまたは python3-lit パッケージは Red Hat Enterprise Linux 9 にインストールされません。LLDB デバッガーと python3-lit パッケージをインストールするには、次を実行します。
# dnf install lldb python3-lit
1.4. CMake ビルドマネージャーのインストール リンクのコピーリンクがクリップボードにコピーされました!
CMake ビルドマネージャーは、ソースコードのビルドプロセスをコンパイラーとは別に管理するツールです。CMake は、ソースコードのコンパイル、ライブラリーの作成、ラッパーの生成、実行可能なファイルの構築を行うネイティブビルド環境を生成できます。
CMake ビルドマネージャーをインストールするには、以下の手順を実行します。
前提条件
-
LLVM Toolset がインストールされている。
詳細は、LLVM Toolset のインストール を参照してください。
手順
CMake をインストールするには、以下のコマンドを実行します。
- Red Hat Enterprise Linux 8 の場合
# yum install cmake
- Red Hat Enterprise Linux 9 の場合
# dnf install cmake
関連情報
- CMake ビルドマネージャーの詳細は、CMake の公式ドキュメント About CMake を参照してください。
CMake ビルドマネージャーの使用の概要は、以下を参照してください。
- CMake リファレンスドキュメントの Introduction
- CMake の公式ドキュメント CMake Tutorial
1.5. LLVM Toolset ドキュメントのインストール リンクのコピーリンクがクリップボードにコピーされました!
LLVM Toolset のドキュメントは、ローカルシステムにインストールできます。
前提条件
-
LLVM Toolset がインストールされている。
詳細は、LLVM Toolset のインストール を参照してください。
手順
llvm-doc パッケージをインストールするには、以下のコマンドを実行します。
Red Hat Enterprise Linux 8 の場合
# yum install llvm-docドキュメントは、
/usr/share/doc/llvm/html/index.htmlの下にあります。Red Hat Enterprise Linux 9 の場合
# dnf install llvm-docドキュメントは、
/usr/share/doc/llvm/html/index.htmlの下にあります。
1.6. CMake ドキュメントのインストール リンクのコピーリンクがクリップボードにコピーされました!
CMake ビルドマネージャーのドキュメントをローカルシステムにインストールできます。
前提条件
-
Cmake がインストールされている。
詳細は、CMake ビルドマネージャーのインストール を参照してください。
手順
cmake-doc パッケージをインストールするには、以下のコマンドを実行します。
Red Hat Enterprise Linux 8 の場合
# yum install cmake-docドキュメントは、
/usr/share/doc/cmake/html/index.htmlの下にあります。Red Hat Enterprise Linux 9 の場合
# dnf install cmake-docドキュメントは、
/usr/share/doc/cmake/html/index.htmlの下にあります。
第2章 Clang コンパイラー リンクのコピーリンクがクリップボードにコピーされました!
Clang は、C ベースの言語 C、C ++、Objective C/C++、OpenCL、および Cuda 用の LLVM コンパイラーフロントエンドです。
LLVM Toolset には、Clang 15.0.7 が同梱されています。
2.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
-
LLVM Toolset がインストールされている。
詳細は、LLVM Toolset のインストール を参照してください。
2.2. ソースファイルのコンパイル リンクのコピーリンクがクリップボードにコピーされました!
Clang コンパイラーを使用して、アセンブリー言語ソースファイルとソースファイルをコンパイルします。Clang は、コンパイルの結果として実行可能なバイナリーファイルを作成します。コードをデバッグできるようにするには、-g フラグを Clang コマンドに追加してデバッグ情報を有効にします。
C++ プログラムをコンパイルするには、clang の代わりに clang++ を使用します。
手順
プログラムをコンパイルするには、以下のコマンドを実行します。
Red Hat Enterprise Linux 8 の場合
$ clang -o -g <binary_file> <source_file>-
<binary_file>を出力ファイルの必要な名前に、<source_file>をソースファイルの名前に置き換えます。
-
Red Hat Enterprise Linux 9 の場合
$ clang -o -g <binary_file> <source_file>-
<binary_file>を出力ファイルの必要な名前に、<source_file>をソースファイルの名前に置き換えます。
-
2.3. プログラムの実行 リンクのコピーリンクがクリップボードにコピーされました!
Clang コンパイラーは、コンパイルの結果として、実行可能なバイナリーファイルを作成します。このファイルを実行し、プログラムを実行するには、以下の手順に従います。
前提条件
-
プログラムがコンパイルされている。
プログラムをコンパイルする方法は、ソースファイルのコンパイル を参照してください。
手順
プログラムを実行するには、実行ファイルが含まれるディレクトリーで実行します。
$ ./<binary_file>
-
<binary_file>は、実行可能ファイルの名前に置き換えます。
2.4. オブジェクトファイルの連結 リンクのコピーリンクがクリップボードにコピーされました!
オブジェクトファイルを連結して、プロジェクト全体ではなく、変更を含むソースファイルのみをコンパイルできます。
複数のソースファイルで設定されるプロジェクトで作業する場合は、Clang コンパイラーを使用して各ソースファイルのオブジェクトファイルをコンパイルします。次のステップとして、これらのオブジェクトファイルを連結します。Clang は、リンクされたオブジェクトファイルを含む実行ファイルを自動的に生成します。コンパイル後に、オブジェクトファイルを再度リンクします。
C++ プログラムをコンパイルするには、clang の代わりに clang++ を使用します。
手順
ソースファイルをオブジェクトファイルにコンパイルするには、以下のコマンドを実行します。
Red Hat Enterprise Linux 8 の場合
$ clang -o <object_file> -c <source_file>-
<object_file>をオブジェクトファイルの名前に置き換え、<source_file>をソースファイルの名前に置き換えます。
-
Red Hat Enterprise Linux 9 の場合
$ clang -o <object_file> -c <source_file>-
<object_file>をオブジェクトファイルの名前に置き換え、<source_file>をソースファイルの名前に置き換えます。
-
オブジェクトファイルをリンクするには、以下のコマンドを実行します。
Red Hat Enterprise Linux 8 の場合
$ clang -o <output_file> <object_file_0> <object_file_1>-
<output_file>を出力ファイルの必要な名前に置き換え、<object_file>をリンクするオブジェクトファイルの名前に置き換えます。
-
Red Hat Enterprise Linux 9 の場合
$ clang -o <output_file> <object_file_0> <object_file_1>-
<output_file>を出力ファイルの必要な名前に置き換え、<object_file>をリンクするオブジェクトファイルの名前に置き換えます。
-
現時点では、Red Hat Enterprise Linux の複数のバージョンでの実行に対応するために、特定のライブラリー機能は LLVM Toolset で構築されたアプリケーションに静的にリンクされています。これにより、セキュリティーリスクが小さくなります。このリスクによりアプリケーションを再構築する必要がある場合、Red Hat はセキュリティーエラータを発行します。
Red Hat は、アプリケーション全体を静的にリンクしないことを推奨します。
第3章 LLDB デバッガー リンクのコピーリンクがクリップボードにコピーされました!
LLDB デバッガーは、C および C++ プログラムのデバッグを行うためのコマンドラインツールです。LLDB を使用してデバッグするコード内でメモリーを検査し、コードの実行状態を制御して、コードの特定セクションの実行を検出します。
LLVM Toolset には、LLDB 15.0.7 が同梱されています。
3.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
-
LLVM Toolset がインストールされている。
詳細は、LLVM Toolset のインストール を参照してください。 -
コンパイラーがデバッグ情報を作成するように設定されている。
Clang コンパイラーの設定方法は、Clang Compiler User's Manual の Controlling Debug Information を参照してください。
GCC コンパイラーの設定方法は、Red Hat Developer Toolset User Guide の デバッグプログラムの準備 を参照してください。
3.2. デバッグセッションの開始 リンクのコピーリンクがクリップボードにコピーされました!
LLDB を使用して対話式のデバッグセッションを開始します。
手順
デバッグするプログラムで LLDB を実行するには、以下のコマンドを使用します。
Red Hat Enterprise Linux 8 の場合
$ lldb <binary_file_name><binary_file>をコンパイルしたプログラムの名前に置き換えます。対話モードで LLDB デバッグセッションを開始しました。コマンドラインターミナルに、デフォルトのプロンプト
(lldb)が表示されるようになりました。
Red Hat Enterprise Linux 9 の場合
$ lldb <binary_file><binary_file>をコンパイルしたプログラムの名前に置き換えます。対話モードで LLDB デバッグセッションを開始しました。コマンドラインターミナルに、デフォルトのプロンプト
(lldb)が表示されるようになりました。
- デバッグセッションを終了してシェルプロンプトに戻るには、以下のコマンドを実行します。
(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 を使用すると、プログラムのコードをステップ実行して、行ポインターの後のコードを 1 行だけ実行できます。
前提条件
-
インタラクティブなデバッグセッションを開始している。
詳細は、デバッグセッションの開始 を参照してください。
手順
コードの 1 行でステップ実行するには、以下を実行します。
- 行ポインターを実行する行に設定します。
以下のコマンドを実行します。
(lldb) step
コードの特定の数行をステップ実行するには、以下を行います。
- 行ポインターを実行する行に設定します。
以下のコマンドを実行します。
(lldb) step -c <number>-
<number>を実行する行数に置き換えます。
-
3.6. ソースコードのリスト表示 リンクのコピーリンクがクリップボードにコピーされました!
デバッグしているプログラムを実行する前に、LLDB デバッガーにソースコードの最初の 10 行が自動的に表示されます。プログラムの実行が停止するたびに、LLDB は停止するソースコードの行と、周りの行を表示します。LLDB を使用すると、デバッグセッションでソースコードの表示を手動でトリガーできます。
前提条件
-
インタラクティブなデバッグセッションを開始している。
詳細は、デバッグセッションの開始 を参照してください。
手順
デバッグしているプログラムのソースコードの最初の 10 行をリスト表示するには、次のコマンドを実行します。
(lldb) list特定の行からソースコードを表示するには、以下を実行します。
(lldb) list <source_file_name>:<line_number>-
<source_file_name>をソースファイルの名前に置き換え、<line_number>は表示する行数に置き換えます。
-
3.7. 現在のプログラムデータの表示 リンクのコピーリンクがクリップボードにコピーされました!
LLDB デバッガーは、複雑さ、有効な式、および関数呼び出しの戻り値の変数にデータを提供します。LLDB を使用して、プログラムの状態に関連するデータを表示できます。
前提条件
-
インタラクティブなデバッグセッションを開始している。
詳細は、デバッグセッションの開始 を参照してください。
手順
特定の変数、式、または戻り値の現在の値を表示するには、以下を実行します。
(lldb) print <data_name>
-
<data_name>を表示するデータに置き換えます。
第4章 RHEL 8 で LLVM Toolset を使用したコンテナーイメージ リンクのコピーリンクがクリップボードにコピーされました!
RHEL 8 では、Containerfiles を使用して、独自の LLVM Toolset コンテナーイメージを Red Hat Universal Base Images (UBI) コンテナー上にビルドできます。
4.1. RHEL 8 での LLVM Toolset のコンテナーイメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
RHEL 8 では、LLVM Toolset パッケージは、Red Hat Universal Base Images (UBI) リポジトリーの一部です。コンテナーイメージのサイズを小さくするには、LLVM Toolset 全体ではなく、個々のパッケージのみをインストールします。
前提条件
-
既存の Containerfile がある。
Containerfiles 作成の詳細は、Dockerfile reference のページを参照してください。
手順
- Red Hat Container Catalog にアクセスします。
- UBI を選択します。
- Get this image をクリックして、指示に従います。
- LLVM Toolset を含むコンテナーイメージを作成するには、以下の行を Containerfile に追加します。
FROM registry.access.redhat.com/ubi8/ubi:latest
RUN yum module install -y llvm-toolset
個々のパッケージのみを含むコンテナーイメージを作成するには、以下の行を Containerfile に追加します。
RUN yum install -y <package-name>-
<package-name>をインストールするパッケージの名前に置き換えます。
-
第5章 LLVM Toolset の変更点 リンクのコピーリンクがクリップボードにコピーされました!
LLVM Toolset が、RHEL 7 および RHEL 8 のバージョン 11.0.0 から 12.0.1 に更新されました。主な変更点は、以下のとおりです。
- 不透明ポインターの移行が完了しました。
- ミドルエンド最適化におけるレガシーパスマネージャーのサポートが削除されました。
Clang の変更:
- C++20 コルーチンは実験的なものとはみなされなくなりました。
-
最適化されていないビルドでの
std::move関数などのコード生成が改善されました。