ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
リンカーとライブラリ Oracle Solaris 11 Information Library (日本語) |
「動的実行可能プログラム」を初期化および実行するとき、アプリケーションとその依存関係を結合させるために、「インタプリタ」が呼び出されます。Oracle Solaris OS では、このインタプリタを実行時リンカーと呼びます。
動的実行可能プログラムのリンク編集中に、特殊な .interp セクションとそれに関連するプログラムヘッダーが作成されます。このセクションには、プログラムのインタプリタを指定するパス名が組み込まれています。リンカーによって提供されるデフォルトの名前は 実行時リンカーの名前で、32 ビットの実行プログラムの場合は /usr/lib/ld.so.1、 64 ビットの実行プログラムの場合は /usr/lib/64/ld.so.1 となります。
注 - ld.so.1 は、共有オブジェクトの特殊なケースです。ここではバージョン番号 1 が使われています。しかし、Oracle Solaris OS の今後のリリースによってバージョンアップされる可能性があります。
動的オブジェクトの実行プロセス中に、カーネルはファイルを読み込んで、プログラムのヘッダー情報を読み取ります。「プログラムヘッダー」を参照してください。この情報を使って、カーネルは必要なインタプリタの名前を検出します。カーネルは、このインタプリンタを読み込んで制御を移し、インタプリタがアプリケーションの実行を続行するために十分な量の情報を転送します。
アプリケーションの初期化に加え、実行時リンカーは、アプリケーションが自分のアドレス空間を拡張できるようにするサービスも提供します。この処理には、追加のオブジェクトの読み込みとこれらのオブジェクトが提供するシンボルへの結合が含まれます。
実行時リンカーは次の処理を実行します。
これらの依存関係内に配置および読み込みを行い、動的情報セクションを分析して、追加の依存関係が必要かどうか判定する。
必要な再配置を実行し、これらのオブジェクトをプロセスの実行に備えて結合する。
依存関係によって作成された初期設定関数を呼び出す。
アプリケーションに制御を渡す。
アプリケーションの実行中に、遅延された関数の結合を実行するよう要求される。
アプリケーションが実行時リンカーサービスに、dlopen(3C) によって追加のオブジェクトを入手するよう要求し、dlsym(3C) を使用してこれらのオブジェクト内のシンボルに結合するよう要求する。