Red Hat Developer Toolset では、ライブラリーは、静的アーカイブで一部のシンボルを指定できるリンカースクリプトを使用してリンクされます。これは、Red Hat Enterprise Linux の複数のバージョンとの互換性を確保するために必要になります。ただし、リンカーのスクリプトは、対応する共有オブジェクトファイルの名前を使用します。したがって、リンカーは、想定とは異なるシンボル処理ルールを使用します。また、以下のようなオブジェクトファイルを指定するオプションの前に、ライブラリーを追加するオプションを指定する際とき、オブジェクトファイルが必要とするシンボルを認識しません。
gcc -lsomelib objfile.o
gcc -lsomelib objfile.o
Copy to ClipboardCopied!Toggle word wrapToggle overflow
このような Red Hat Developer Toolset のライブラリーを使用すると、リンカーのエラーメッセージ (undefined reference to symbol) が表示されます。シンボル解決とリンクを正常に有効にするには、標準のリンクプラクティスに従い、オブジェクトファイルを指定するオプションの後に、ライブラリーを追加するオプションを指定します。
gcc objfile.o -lsomelib
gcc objfile.o -lsomelib
Copy to ClipboardCopied!Toggle word wrapToggle overflow
この推奨事項は、Red Hat Enterprise Linux の一部として利用可能な GCC のバージョンを使用する場合にも適用されることに注意してください。
Red Hat Developer Toolset 3.x の GCC には、libasan パッケージが含まれていました。これは、libasan のシステムバージョンと競合している可能性があります。したがって、システムに存在した libasan に応じて、-fsanitize=address ツールは、システム GCC または Red Hat Developer Toolset バージョンの GCC のいずれかでのみ機能し、同時に両方で機能することはありませんでした。この競合を防ぐために、Red Hat Developer Toolset 4.x 以降のバージョンでは、パッケージの名前が libasanN に変更されました。この N は数値になります。ただし、Red Hat Software Collections リポジトリーを有効にすると、リポジトリーで引き続き利用できる Red Hat Developer Toolset 3.x バージョンよりも前のバージョンで、libasan のシステムバージョンが利用可能であるため、システムの更新後に問題が発生する可能性があります。この問題を回避するには、更新時にこのパッケージを除外します。
yum update --exclude=libasan
~]$ yum update --exclude=libasan
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Red Hat Developer Toolset に同梱される OProfile 1.3.0 および OProfile 1.2.0 は、IBM Z を除くすべての対応アーキテクチャーで動作します。IBM Z の場合、ocount ツールのみが、z196、zEC12、および z13 のモデルで動作します。operf および oparchive や opannotate などの他のツールは IBM Z で動作しません。プロファイリングの目的で、ユーザーは Red Hat Enterprise Linux 7 システム OProfile 0.9.9 バージョンを使用することが推奨されます。これは、TIMER ソフトウェア割り込みで opcontrol をサポートします。
OProfile 0.9.9 で収集されるデータの正しいレポートを行うには、対応する opreport ユーティリティーが必要になることに注意してください。そのため、Red Hat Developer Toolset のレポートツールが、opcontrol レガシーモード内で収集されるデータを適切に処理できないため、opcontrol ベースのプロファイリングは Red Hat Developer Toolset を無効にして実行する必要があります。
devtoolset-version-package_name-debuginfo パッケージは、ベース Red Hat Enterprise Linux システムまたは他のバージョンの Red Hat Developer Toolset からの対応するパッケージと競合します。これは、devtoolset-version-gcc-debuginfo、devtoolset-version-ltrace-debuginfo、devtoolset-version-valgrind-debuginfo に適用され、他の debuginfo パッケージにも適用される可能性があります。同様の競合は、64 ビットの debuginfo パッケージが 32 ビットの debuginfo パッケージと競合する multilib 環境でも発生する可能性があります。
たとえば、Red Hat Enterprise Linux 7 では、devtoolset-7-gcc-debuginfo が、gcc-base-debuginfo、gcc-debuginfo、および gcc-libraries-debuginfo の 3 つのパッケージと競合します。Red Hat Enterprise Linux 6 では、devtoolset-7-gcc-debuginfo が 1 つのパッケージ(gcc-libraries-debuginfo) と競合します。したがって、競合する debuginfo パッケージがインストールされている場合は、Red Hat Developer Toolset をインストールしようとすると、以下の例のようなトランザクションチェックエラーメッセージが表示されて失敗する可能性があります。
file /usr/lib/debug/usr/lib64/libitm.so.1.0.0.debug from install of gcc-base-debuginfo-4.8.5-16.el7.x86_64 conflicts with file from package devtoolset-7-gcc-debuginfo-7.2.1-1.el7.x86_64
file /usr/lib/debug/usr/lib64/libitm.so.1.0.0.debug from install of gcc-base-debuginfo-4.8.5-16.el7.x86_64 conflicts with file from package devtoolset-7-gcc-debuginfo-7.2.1-1.el7.x86_64
Copy to ClipboardCopied!Toggle word wrapToggle overflow
file /usr/lib/debug/usr/lib64/libtsan.so.0.0.0.debug from install of gcc-debuginfo-4.8.5-16.el7.x86_64 conflicts with file from package devtoolset-7-gcc-debuginfo-7.2.1-1.el7.x86_64
file /usr/lib/debug/usr/lib64/libtsan.so.0.0.0.debug from install of gcc-debuginfo-4.8.5-16.el7.x86_64 conflicts with file from package devtoolset-7-gcc-debuginfo-7.2.1-1.el7.x86_64
Copy to ClipboardCopied!Toggle word wrapToggle overflow
file /usr/lib/debug/usr/lib64/libitm.so.1.0.0.debug from install of devtoolset-7-gcc-debuginfo-7.2.1-1.el6.x86_64 conflicts with file from package gcc-libraries-debuginfo-7.1.1-2.3.1.el6_9.x86_64
file /usr/lib/debug/usr/lib64/libitm.so.1.0.0.debug from install of devtoolset-7-gcc-debuginfo-7.2.1-1.el6.x86_64 conflicts with file from package gcc-libraries-debuginfo-7.1.1-2.3.1.el6_9.x86_64
Copy to ClipboardCopied!Toggle word wrapToggle overflow
この問題を回避するには、Red Hat Developer Toolset 11.0 をインストールする前に、競合する debuginfo パッケージを手動でアンインストールします。必要な場合に関連する debuginfo パッケージのみをインストールし、そのような問題の発生を想定することを推奨します。
その他の注意事項
Red Hat Developer Toolset は、主に複数のバージョンの Red Hat Enterprise Linux にデプロイするユーザーアプリケーションの開発用のコンパイラーを提供することを目的としています。オペレーティングシステムのコンポーネント、カーネルモジュール、およびデバイスドライバーは、通常、提供されるベース OS コンパイラーが推奨されている特定バージョンの Red Hat Enterprise Linux に対応します。
Red Hat Developer Toolset 11.0 は、C、C++、および Fortran 開発のみをサポートします。その他の言語の場合は、Red Hat Enterprise Linux で利用可能な GCC のシステムバージョンを呼び出します。
Red Hat Enterprise Linux(Red Hat Enterprise Linux 7 など)で Red Hat Developer Toolset 11.0 を使用してアプリケーションをビルドし、そのアプリケーションを以前のマイナーバージョン(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 を使用してください。
非共有ライブラリー libstdc++_nonshared.a のコードはすべて、Red Hat Developer Toolset 11. 0 では 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 はセキュリティーエラータでこれを通知します。開発者は、同じ理由でアプリケーション全体を静的にリンクしないことが強く推奨されます。
Copy to ClipboardCopied!Toggle word wrapToggle overflow
gcc -c foo.c
~]$ gcc -c foo.c
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Red Hat Developer Toolset 11.0 に含まれる elfutils ライブラリーはクライアントアプリケーションに静的にリンクされているため、libelf、libdw、および libasm データ構造を外部コードに渡す場合や、外部コードから受信したハンドルを libelf、libdw、および libasm に渡す場合は、注意が必要です。
elfutils のシステムバージョンに対して動的にリンクされている外部ライブラリーは、Red Hat Developer Toolset 11.0 バージョンの elfutils (またはその逆)からの構造へのポインターが渡されます。
通常、elfutils の Red Hat Developer Toolset 11.0 バージョンで使用されるデータ構造は Red Hat Enterprise Linux システムのバージョンと互換性がなく、その構造は Red Hat Enterprise Linux のシステムバージョンと互換性がありません。
Red Hat Developer Toolset 11.0 ライブラリーを使用するアプリケーションでは、ライブラリーのシステムバージョンにリンクされていたすべてのコードは、Red Hat Developer Toolset 11.0 に含まれるライブラリーに対して再コンパイルする必要があります。
libdw によって内部で使用される elfutilsEBL ライブラリーは、バックエンドを動的に開かないように修正されました。代わりに、バックエンドの選択がライブラリー自体でコンパイルされます。32 ビット AMD および Intel アーキテクチャー、AMD64 および Intel 64 システム、Intel Itanium、IBM Z、32 ビット IBM Power Systems、64 ビット IBM Power Systems、IBM POWER、ビッグエンディアン、および 64 ビット ARM アーキテクチャー。クライアントが上記のもの以外のアーキテクチャーの ELF ファイルと連携する必要がある場合には、一部の機能が利用できない場合があります。
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 システムバージョンを使用することが推奨されます。