第17章 コンパイラーおよび開発ツール
以下の章では、コンパイラーおよび開発ツールに関する RHEL 8 と RHEL 9 の間の最も重要な変更点を説明します。
17.1. glibc の主な変更
すべてのスレッド API が libc.so.6
に統合されました
RHEL 8 では、システムスレッドライブラリー libpthread.so
は個別のライブラリーでした。RHEL 9 では、すべてのスレッド API がコア C ライブラリー libc.so.6
に統合されました。スレッドをコア C ライブラリーに移動すると、ライブラリーはデフォルトでスレッドをサポートできるようになります。単一のファイルを使用すると、スレッド API とコア C、POSIX、および BSD API がすべて同時に更新されるため (個別のライブラリーはありません)、インプレースアップグレードプロセスもスムーズになります。
開発者は、スレッド化されたアプリケーションをリンクする際に、これまでどおり -lpthread
オプションを使用できますが、これは不要になりました。
これまで、ライブラリーは pthread_create
または pthread_cancel
への弱い参照を使用して、プロセスがマルチスレッド化される可能性があるかどうかを検出していました。libpthread.so
がコア C ライブラリーに含まれたことで、このチェックは常に成功するようになったため、ライブラリーは代わりに __libc_single_threaded
シンボルを使用する必要があります。
libdl
ライブラリーは libc.so.6
に統合されました
RHEL 8 では、libdl
ライブラリーは個別のライブラリーでした。RHEL 9 では、libdl
ライブラリーがコア C ライブラリー libc.so.6
に統合されました。つまり、dlsym
関数の干渉がより困難になりました。シンボル解決が機能する仕組みを制御する必要があるアプリケーションを、auditors (LD_AUDIT
) インターフェイスに切り替える必要があります。
dns
および file
用の Name Service Switch サービスプラグインが、libc.so.6
に統合されました。
RHEL 8 では、ユーザーおよびグループの ID 管理 API にデータを提供する files
および dns
の Name Service Switch (NSS)サービスは、異なるプラグインでした。RHEL 9 では、プラグインはコア C ライブラリー libc.so.6
に統合されました。files
と dns
サービスプロバイダーを移動すると、NSS files
と dns
アクセスサービスがプロセスの起動時に常に読み込まれることを認識して、マウント名前空間の境界を越える必要があるアプリケーション (コンテナーに入るなど) を実行できます。
files
または dns
を参照する nsswitch.conf
に依存するユーザーおよびグループ API を呼び出す場合、開発者はこれらのサービスが常に存在し、基礎となるサービスデータを提供すると想定できます。