Red Hat Developer Toolset は、主に複数のバージョンの Red Hat Enterprise Linux にデプロイするユーザーアプリケーションの開発用のコンパイラーを提供することを目的としています。オペレーティングシステムのコンポーネント、カーネルモジュール、およびデバイスドライバーは、通常、提供されるベース OS コンパイラーが推奨されている特定バージョンの Red Hat Enterprise Linux に対応します。
Red Hat Developer Toolset 10.1 は、C、C++、および Fortran の開発のみをサポートします。その他の言語の場合は、Red Hat Enterprise Linux で利用可能な GCC のシステムバージョンを呼び出します。
Red Hat Enterprise Linux で Red Hat Developer Toolset 10.1 を使用してアプリケーションをビルド (Red Hat Enterprise Linux 7 など)、そのアプリケーションを以前のマイナーバージョンで実行すると (Red Hat Enterprise Linux 6.7.z など)、Red Hat Enterprise Linux リリース間でのツールチェーン以外のコンポーネントの違いによりランタイムエラーが発生する可能性があります。互換性を慎重に確認することが推奨されます。Red Hat は、Red Hat Developer Toolset でビルドされたアプリケーションの実行をサポートします。Red Hat Developer Toolset は、そのアプリケーションのビルドに使用するバージョンよりも、Red Hat Enterprise Linux のサポートされるリリースと同じです。
Valgrind は、Red Hat Developer Toolset の GCC をインストールせずに再構築する必要があります。そうしないと、Red Hat Enterprise Linux システム GCC の代わりに使用されます。Red Hat が提供するバイナリーファイルは、システム GCC を使用して構築されています。テストでは、Red Hat Developer Toolset の GDB を使用してください。
Red Hat Developer Toolset 10.1 の非共有ライブラリー libstdc++_nonshared.a
のすべてのコードは、GNU General Public License v3 でライセンスが適用され、Free Software Foundation により公開されているように、GCC Runtime Library Exception バージョン 3.1 で説明されている、セクション 7 に記載の追加のパーミッションが付与されます。
Red Hat Developer Toolset に含まれるコンパイラーは、Red Hat Enterprise Linux で利用可能な以前のコンパイラーよりも新しい DWARF デバッグレコードを生成します。これらの新しいデバッグレコードにより、特に C++ や最適化されたコードなど、さまざまな方法でデバッグ作業が改善されます。ただし、一部のツールはまだ新しい DWARF デバッグレコードを処理できません。 古いスタイルのデバッグレコードを生成するには、オプション -gdwarf-2 -gstrict-dwarf
または -gdwarf-3 -gstrict-dwarf
を使用します。
最新のライブラリー機能の一部は、複数のバージョンの Red Hat Enterprise Linux での実行に対応するために、Red Hat Developer Toolset で構築されたアプリケーションに静的にリンクされています。これにより、通常の Red Hat Enterprise Linux エラータはこのコードを変更しないため、セキュリティーリスクが若干追加されます。このような問題により開発者がアプリケーションを再構築する必要がある場合、Red Hat はセキュリティーエラータでこれを通知します。開発者は、同じ理由でアプリケーション全体を静的にリンクしないことが強く推奨されます。
-fgnu-tm
オプションを使用する場合の libitm ライブラリーの欠落に関連するエラーメッセージには、libitm パッケージをインストールする必要がある点に注意してください。以下のコマンドでパッケージをインストールできます。
yum install libitm
Red Hat Developer Toolset に含まれている GCC とともに ccache ユーティリティーを使用するには、環境を正しく設定します。以下に例を示します。
~]$ scl enable devtoolset-10 '/usr/lib64/ccache/gcc -c foo.c'
または、デフォルトのコンパイラーとして GCC の Red Hat Developer Toolset バージョンでシェルを作成できます。
~]$ scl enable devtoolset-10 'bash'
シェルを作成したら、以下の 2 つのコマンドを実行します。
~]$ export PATH=/usr/lib64/ccache${PATH:+:${PATH}}
~]$ gcc -c foo.c
Red Hat Developer Toolset 10.1 に含まれる elfutils ライブラリーはクライアントアプリケーションに静的にリンクされているため、libelf
、libdw
、および libasm
データ構造のハンドルを外部コードに渡す場合や、外部コードから受信したハンドルを libelf
、libdw
、および libasm
に渡す場合は注意が必要です。
elfutils のシステムバージョンに対して動的にリンクされている外部ライブラリーに、elfutils の Red Hat Developer Toolset 10.1 バージョンの構造にポインターが渡される場合(またはその逆の場合)には特に注意してください。
通常、elfutils の Red Hat Developer Toolset 10.1 バージョンで使用されるデータ構造は、Red Hat Enterprise Linux のシステムバージョンと互換性がありません。また、ある構造を他方で行うことはできません。
Red Hat Developer Toolset 10.1 ライブラリーを使用するアプリケーションでは、ライブラリーのシステムバージョンにリンクされていたすべてのコードは、Red Hat Developer Toolset 10.1 に含まれるライブラリーに対して再コンパイルする必要があります。
libdw
によって内部で使用される elfutils EBL
ライブラリーは、バックエンドを動的に開かないように修正されました。代わりに、バックエンドの選択がライブラリー自体でコンパイルされます。32 ビット AMD および Intel アーキテクチャー、AMD64 および Intel 64 システム、Intel Itanium、IBM Z、32 ビット IBM Power Systems、64 ビット IBM Power Systems、IBM POWER、ビッグエンディアン、および 64 ビット ARM アーキテクチャー。クライアントが上記のもの以外のアーキテクチャーの ELF ファイルと連携する必要がある場合には、一部の機能が利用できない場合があります。
scl ユーティリティーが管理する一部のパッケージには、sudo を必要とする特権付きサービスが含まれます。システムの sudo は環境変数をクリアするため、Red Hat Developer Toolset には、scl enable をラッピングした独自の sudo シェルスクリプトが含まれます。現在、このスクリプトは通常の sudo オプションを解析したり、渡したりしませんsudo COMMAND ARGS ... だけが解析されて渡されます。Red Hat Developer Toolset 対応シェル内で sudo のシステムバージョンを使用するには、/usr/bin/sudo
バイナリーを使用します。
Intel 社が TSX (Transactional Synchronization Extensions) 命令に関するエラータ
HSW136 を発行しました。特定の状況では、Intel TSX 命令を使用するソフトウェアにより、予期しない動作が発生する可能性があります。TSX 命令は、特定の条件下で Red Hat Developer Toolset
GCC で構築されたアプリケーションによって実行できます。これらには、TSX 命令が有効なハードウェアで実行される場合に、
GCC の実験的な Transactional Memory サポート (
-fgnu-tm
オプションの使用) の使用が含まれます。Red Hat Developer Toolset のユーザーは、現時点でトランザクションメモリーを試す場合や、適切なハードウェアまたはファームウェアの更新を適用して TSX 命令を無効にする場合は、注意が必要です。
GCC の Memory Protection Extensions (MPX) 機能を使用するには、Red Hat Developer Toolset バージョンの libmpx
ライブラリーが必要です。これがないと、アプリケーションが適切にリンクされない可能性があります。
2 つの binutils リンカー、gold
および ld
は、非表示のシンボルを処理する方法が複数あります。これにより、動作の非互換性が発生します。以前は、gold
および ld
リンカーは、共有ライブラリーと非表示のシンボルに関して、一貫性のない誤った動作をしていました。以下の 2 つのシナリオがあります。
gold
リンカーが更新され、非表示でないバージョンにも存在する非表示のシンボルに関する偽りの警告メッセージが発行されなくなりました。2 つ目のシナリオは、リンカーで解決できません。アプリケーションの実行時に非表示以外のバージョンのシンボルを利用できるのは、プログラマー次第です。
したがって、この 2 つのリンカーの動作はより密接になりますが、非表示でないバージョンで見つけられない非表示シンボルへの参照の場合とは異なります。ただし、この状況には正しい動作が 1 つないため、リンカーは異なります。
valgrind-openmpi サブパッケージは、Red Hat Developer Toolset の Valgrind では提供されなくなりました。以前は、devtoolset-<version>-valgrind-openmpi サブパッケージにより、Red Hat Enterprise Linux のさまざまなマイナーリリースとの非互換性の問題と再構築の問題が発生していました。openmpi-devel ライブラリーに対して構築されたプログラムに対して Valgrind を実行する必要がある場合は、valgrind および valgrind-openmpi パッケージの最新の Red Hat Enterprise Linux システムバージョンを使用することが推奨されます。