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 上でアプリケーションを構築およびデバッグするための開発ツールの更新版を提供します。
| 名前 | バージョン | 説明 |
| 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 で利用できます。
適切なフラグでコンパイルされた C++ オブジェクトがすべて、GCC バージョン 6 以降を使用してビルドされている場合は、C++14 言語バージョンの使用に対応します。
- C++17
この言語規格は、GCC Toolset 15 で利用できます。
これは GCC Toolset 15 のデフォルトの言語規格設定であり、GNU 拡張機能を含んでいます。これは、
-std=gnu++17オプションを明示的に使用することと同じです。適切なフラグでコンパイルされた C++ オブジェクトがすべて、GCC バージョン 10 以降を使用してビルドされている場合は、C++17 言語バージョンの使用に対応しています。
- C++20、C++23、C++26
これらの言語標準は、GCC Toolset 15 では実験的、不安定、およびサポートされていない機能としてのみ利用できます。さらに、これらの規格を使用してビルドされたオブジェクト、バイナリーファイル、およびライブラリーの互換性は保証できません。
C++20 規格を有効にするには、コマンドラインオプション
-std=c++20を g++ コマンドラインに追加します。C++23 規格を有効にするには、コマンドラインオプション
-std=c++23を g++ コマンドラインに追加します。C++26 標準を有効にするには、g++ コマンドラインにコマンドラインオプション
-std=c++26を追加します。すべての言語規格は、規格に準拠したバリアントまたは GNU 拡張機能の両方で利用できます。
GCC Toolset 15 でビルドされたオブジェクトとシステムツールチェーンでビルドされたオブジェクト (特に .o または .a ファイル) を組み合わせる場合は、GCC Toolset 15 を使用してリンクしてください。これにより、GCC Toolset 15 でのみ提供される新しいライブラリー機能がリンク時に解決されます。
4.8.3. GCC Toolset 15 の GCC の詳細 リンクのコピーリンクがクリップボードにコピーされました!
- ライブラリーの静的リンク
- 複数バージョンの Red Hat Enterprise Linux での実行をサポートするために、GCC Toolset 15 で構築されたアプリケーションには、一部の最近のライブラリー機能が静的にリンクされます。標準の Red Hat Enterprise Linux エラータではこのコードが変更されないため、これにより、若干のセキュリティーリスクが発生します。Red Hat は、このリスクにより、開発者がアプリケーションを再構築する必要がある場合でも、セキュリティーエラータを使用してこのアプリケーションと通信します。
このようなセキュリティーリスクが発生するため、開発者は同じ理由によりアプリケーション全体を静的にリンクしないことが強く推奨されます。
- 連結時に、オブジェクトファイルの後にライブラリーを指定
GCC Toolset 15 では、ライブラリーはリンカースクリプトを使用してリンクされます。このスクリプトは、静的アーカイブを通じていくつかのシンボルを指定している場合があります。これは、Red Hat Enterprise Linux の複数のバージョンとの互換性を確保するために必要になります。ただし、リンカーのスクリプトは、対応する共有オブジェクトファイルの名前を使用します。したがって、リンカーは、オブジェクトファイルを指定するオプションの前に、ライブラリーを追加するオプションを指定する際に、想定とは異なるシンボル処理ルールを使用して、オブジェクトファイルが必要とするシンボルを認識しません。
$ scl enable gcc-toolset-15 'gcc -lsomelib objfile.o'このように GCC Toolset 15 のライブラリーを使用すると、
undefined reference to symbolというリンカーエラーメッセージが表示されます。この問題を回避するには、標準的なリンク方法に従い、オブジェクトファイルを指定するオプションの後に、ライブラリーを追加するオプションを指定します。$ scl enable gcc-toolset-15 'gcc objfile.o -lsomelib'この推奨事項は、Red Hat Enterprise Linux のベースバージョンの GCC を使用する場合にも適用されることに注意してください。
4.8.4. GCC Toolset 15 の binutils の詳細 リンクのコピーリンクがクリップボードにコピーされました!
- ライブラリーの静的リンク
- GCC Toolset 15 は、新しいライブラリー機能をアプリケーションに静的にリンクし、複数の Red Hat Enterprise Linux バージョン間での互換性を確保します。静的にリンクされたコードにより、軽微なセキュリティーリスクが発生する可能性があります。セキュリティー更新によってアプリケーションの再構築が必要になるためです。セキュリティー上の脆弱性が発見された場合、Red Hat はセキュリティーアドバイザリーを通じて、影響を受けるアプリケーションを再構築するよう開発者に通知します。
このようなセキュリティーリスクが発生するため、開発者は同じ理由によりアプリケーション全体を静的にリンクしないことが強く推奨されます。
- 連結時に、オブジェクトファイルの後にライブラリーを指定
GCC Toolset 15 では、ライブラリーはリンカースクリプトを使用してリンクされます。このスクリプトは、静的アーカイブを通じていくつかのシンボルを指定している場合があります。これは、Red Hat Enterprise Linux の複数のバージョンとの互換性を確保するために必要になります。ただし、リンカーのスクリプトは、対応する共有オブジェクトファイルの名前を使用します。したがって、リンカーは、オブジェクトファイルを指定するオプションの前に、ライブラリーを追加するオプションを指定する際に、想定とは異なるシンボル処理ルールを使用して、オブジェクトファイルが必要とするシンボルを認識しません。
$ scl enable gcc-toolset-15 'ld -lsomelib objfile.o'このように GCC Toolset 15 のライブラリーを使用すると、
undefined reference to symbolというリンカーエラーメッセージが表示されます。この問題を回避するには、標準のリンクプラクティスに従い、オブジェクトファイルを指定するオプションの後に、ライブラリーを追加するオプションを指定します。$ scl enable gcc-toolset-15 'ld objfile.o -lsomelib'この推奨事項は、Red Hat Enterprise Linux のベースバージョンの binutils を使用する場合にも適用されることに注意してください。
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
この問題を回避するには、プラグインディレクトリーに annobin.so から gcc-annobin.so へのシンボリックリンクを作成します。
プラグインディレクトリーに変更します:
$ cd /opt/rh/gcc-toolset-15/root/usr/lib/gcc/architecture-linux-gnu/15/pluginシンボリックリンクを作成します。
$ ln -s annobin.so gcc-annobin.so
architecture はシステムでお使いのアーキテクチャーに置き換えてください。
-
aarch64 -
i686 -
ppc64le -
s390x -
x86_64