アプリケーションのリンク編集中に指定された依存関係は、プロセスの初期設定中に実行時リンカーによって処理されます。このメカニズムに加えて、アプリケーションは、追加オブジェクトと結合することにより、その実行中にアドレススペースを拡張できます。アプリケーションは、アプリケーションの標準的な依存関係の処理に使用される、実行時リンカーの同じサービスを実際に使用します。
遅延オブジェクトの結合処理には、いくつかの利点があります。
アプリケーションの初期設定中ではなく、オブジェクトが要求された時点でオブジェクトを処理することにより、起動時間を大幅に削減できます。アプリケーションの特定の実行中に、オブジェクトにより提供されるサービスが必要でない場合、オブジェクトは要求されません。このような状態は、ヘルプやデバッグ情報を提供するオブジェクトに対して発生する可能性があります。
アプリケーションは、ネットワーキングプロトコルなどの、必要なサービスによって決まる、いくつかの異なるオブジェクト間で選択されます。
実行時にオブジェクトに追加されたプロセスのアドレススペースは、使用後には解放されます。
アプリケーションは、次の典型的な手順を使用して、追加の共有オブジェクトにアクセスできます。
共有オブジェクトは、dlopen(3C) を使用して実行中のアプリケーションのアドレススペースに配置され、追加されます。この共有オブジェクトの依存関係は、この時点で配置されて追加されます。
追加された共有オブジェクトとその依存関係は、再配置されます。これらのオブジェクト内の初期設定セクションが呼び出されます。
アプリケーションは、追加されたオブジェクト内のシンボルを、dlsym(3C) を使用して配置します。次に、アプリケーションはデータを参照するか、またはこの新しいシンボルによって定義された関数を呼び出します。
オブジェクトによってアプリケーションが終了したあとで、dlclose(3C) を使用するとアドレススペースを解放できます。解放されたオブジェクト内に存在する終了セクションは、すべてこの時点で呼び出されます。
実行時リンカーのインタフェースルーチンを使用した結果発生したエラー状態は、dlerror(3C) を使用して表示できます。
実行時リンカーのサービスは、ヘッダーファイル dlfcn.h 内に定義されており、共有オブジェクト libc.so.1 経由でアプリケーションから使用できます。次の例では、ファイル main.c は、ルーチンのいずれの dlopen(3C) ファミリでも参照でき、アプリケーション prog は、実行時にこれらのルーチンと結合できます。
$ cc -o prog main.c