検索

4.6. GCC Toolset 13

download PDF

GCC Toolset バージョン 13 とこのバージョンに含まれるツールに固有の情報について説明します。

4.6.1. GCC Toolset 13 が提供するツールおよびバージョン

GCC Toolset 13 は、以下のツールおよびバージョンを提供します。

表4.5 GCC Toolset 13 のツールバージョン
名前バージョン説明

GCC

13.2.1

C、C++、および Fortran に対応するポータブルなコンパイラースイート。

GDB

12.1

C、C++、および Fortran で記述されたプログラムのコマンドラインデバッガー。

binutils

2.40

オブジェクトファイルおよびバイナリーを検査および操作するためのバイナリーツールおよびその他のユーティリティーのコレクション。

dwz

0.14

ELF 共有ライブラリーおよび ELF 実行ファイルに含まれる DWARF デバッグ情報 (サイズ) を最適化するツール。

annobin

12.32

ビルドセキュリティーチェックツール。

4.6.2. GCC Toolset 13 の C++ 互換性

重要

ここで示されている互換性情報は、GCC Toolset 13 の GCC にのみ適用されます。

GCC Toolset の GCC コンパイラーは、以下の C++ 規格を使用できます。

C++14

この言語の規格は、GCC Toolset 13 で利用できます。

適切なフラグでコンパイルされた C++ オブジェクトがすべて、GCC バージョン 6 以降を使用してビルドされている場合は、C++14 言語バージョンの使用に対応します。

C++11

この言語の規格は、GCC Toolset 13 で利用できます。

適切なフラグでコンパイルされた C++ オブジェクトがすべて、GCC バージョン 5 以降を使用してビルドされている場合は、C++11 言語バージョンの使用に対応しています。

C++98
この言語の規格は、GCC Toolset 13 で利用できます。この規格を使用して構築されたバイナリー、共有ライブラリー、およびオブジェクトは、GCC Toolset、Red Hat Developer Toolset、ならびに RHEL 5、6、7、および 8 の GCC でビルドされているかどうかにかかわらず、自由に組み合わせることができます。
C++17

この言語の規格は、GCC Toolset 13 で利用できます。

これは、GCC Toolset 13 のデフォルトの言語規格設定で、GNU 拡張機能は、-std=gnu++17 オプションを明示的に使用するのと同じです。

適切なフラグでコンパイルされた C++ オブジェクトがすべて、GCC バージョン 10 以降を使用してビルドされている場合は、C++17 言語バージョンの使用に対応しています。

C++20 および C++23

このような言語の規格は、GCC Toolset 13 では実験的で、不安定な、サポート対象外の機能としてのみ利用できます。さらに、この規格を使用して構築されたオブジェクト、バイナリーファイル、およびライブラリーの互換性は保証できません。

C++20 規格を有効にするには、コマンドラインオプション -std=c++20 を g++ コマンドラインに追加します。

C++23 規格を有効にするには、コマンドラインオプション -std=c++23 を g++ コマンドラインに追加します。

すべての言語規格は、規格に準拠したバリアントまたは GNU 拡張機能の両方で利用できます。

GCC Toolset で構築されたオブジェクトを、RHEL ツールチェーン (特に .o ファイルまたは ..a ファイル) で構築したオブジェクトと混在する場合、GCC Toolset ツールチェーンはどの連携にも使用する必要があります。これにより、GCC Toolset が提供する新しいライブラリー機能は、リンク時に解決されます。

4.6.3. GCC Toolset 13 の GCC の詳細

ライブラリーの静的リンク

最新のライブラリー機能の一部は、複数のバージョンの Red Hat Enterprise Linux での実行に対応するために、GCC Toolset で構築されたアプリケーションに静的にリンクされています。標準の Red Hat Enterprise Linux エラータではこのコードが変更されないため、これにより、若干のセキュリティーリスクが発生します。Red Hat は、このリスクにより、開発者がアプリケーションを再構築する必要がある場合でも、セキュリティーエラータを使用してこのアプリケーションと通信します。

重要

このようなセキュリティーリスクが発生するため、開発者は同じ理由によりアプリケーション全体を静的にリンクしないことが強く推奨されます。

連結時に、オブジェクトファイルの後にライブラリーを指定

GCC Toolset では、ライブラリーは、静的アーカイブで一部のシンボルを指定できるリンカースクリプトを使用してリンクされます。これは、Red Hat Enterprise Linux の複数のバージョンとの互換性を確保するために必要になります。ただし、リンカーのスクリプトは、対応する共有オブジェクトファイルの名前を使用します。したがって、リンカーは、オブジェクトファイルを指定するオプションの前に、ライブラリーを追加するオプションを指定する際に、想定とは異なるシンボル処理ルールを使用して、オブジェクトファイルが必要とするシンボルを認識しません。

$ scl enable gcc-toolset-13 'gcc -lsomelib objfile.o'

この方法で GCC Toolset のライブラリーを使用すると、リンカーのエラーメッセージで、シンボルの参照が未定義 になります。この問題を回避するには、標準のリンクプラクティスに従い、オブジェクトファイルを指定するオプションの後に、ライブラリーを追加するオプションを指定します。

$ scl enable gcc-toolset-13 'gcc objfile.o -lsomelib'

この推奨事項は、Red Hat Enterprise Linux のベースバージョンの GCC を使用する場合にも適用されることに注意してください。

4.6.4. GCC Toolset 13 の binutils の詳細

ライブラリーの静的リンク

最新のライブラリー機能の一部は、複数のバージョンの Red Hat Enterprise Linux での実行に対応するために、GCC Toolset で構築されたアプリケーションに静的にリンクされています。標準の Red Hat Enterprise Linux エラータではこのコードが変更されないため、これにより、若干のセキュリティーリスクが発生します。Red Hat は、このリスクにより、開発者がアプリケーションを再構築する必要がある場合でも、セキュリティーエラータを使用してこのアプリケーションと通信します。

重要

このようなセキュリティーリスクが発生するため、開発者は同じ理由によりアプリケーション全体を静的にリンクしないことが強く推奨されます。

連結時に、オブジェクトファイルの後にライブラリーを指定

GCC Toolset では、ライブラリーは、静的アーカイブで一部のシンボルを指定できるリンカースクリプトを使用してリンクされます。これは、Red Hat Enterprise Linux の複数のバージョンとの互換性を確保するために必要になります。ただし、リンカーのスクリプトは、対応する共有オブジェクトファイルの名前を使用します。したがって、リンカーは、オブジェクトファイルを指定するオプションの前に、ライブラリーを追加するオプションを指定する際に、想定とは異なるシンボル処理ルールを使用して、オブジェクトファイルが必要とするシンボルを認識しません。

$ scl enable gcc-toolset-13 'ld -lsomelib objfile.o'

この方法で GCC Toolset のライブラリーを使用すると、リンカーのエラーメッセージで、シンボルの参照が未定義 になります。この問題を回避するには、標準のリンクプラクティスに従い、オブジェクトファイルを指定するオプションの後に、ライブラリーを追加するオプションを指定します。

$ scl enable gcc-toolset-13 'ld objfile.o -lsomelib'

また、この推奨事項は、Red Hat Enterprise Linux のベースバージョンの binutils を使用している場合にも適用されることに注意してください。

4.6.5. GCC Toolset 13 の annobin の詳細

状況によっては、GCC Toolset 13 の annobingcc 間の同期の問題が原因で、コンパイルが失敗し、次のようなエラーメッセージが表示されることがあります。

cc1: fatal error: inaccessible plugin file
opt/rh/gcc-toolset-13/root/usr/lib/gcc/architecture-linux-gnu/13/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-13/root/usr/lib/gcc/architecture-linux-gnu/13/plugin
# ln -s annobin.so gcc-annobin.so

architecture はシステムでお使いのアーキテクチャーに置き換えてください。

  • aarch64
  • i686
  • ppc64le
  • s390x
  • x86_64
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.