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
systemtap コンポーネント
ユーザーが devtoolset-10-stap-server サービスの起動を試みると、IBM POWER (リトルエンディアン)アーキテクチャーで SELinux AVC 拒否が発生します。この問題を回避するには、SELinux を無効にし、サービスを起動して、SELinux を有効にします。
oprofile コンポーネント
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 10.1 をインストールする前に、競合する debuginfo パッケージを手動でアンインストールします。必要な場合に関連する debuginfo パッケージのみをインストールし、そのような問題の発生を想定することを推奨します。
その他の注意事項
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 はセキュリティーエラータでこれを通知します。開発者は、同じ理由でアプリケーション全体を静的にリンクしないことが強く推奨されます。
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 システムバージョンを使用することが推奨されます。