リンカーとライブラリ

初期化および終了関数

実行時リンカーがプロセスイメージを作成し、再配置を行なった後、各共有オブジェクトには初期化コードを実行する機会があります。

同様に、共有オブジェクトには終了関数が存在できます。終了関数は、元となるプロセスが終了手順を開始した後、atexit(3C) の機構で実行されます。詳細は、atexit(3C) のマニュアルページを参照してください。

共有オブジェクトは、動的構造体 (「動的セクション」で記述している) の DT_INIT エントリと DT_FINI エントリを使って初期化関数と終了関数を指定します。標準的には、これらの関数のコードは .init セクションと .fini セクション (「セクション」で記述している) に存在します。


注 -

atexit(3C) 終了処理は通常は行われますが、プロセス終了時に実行されることは保証されません。たとえば、プロセスが _exit() を呼び出した場合、またはプロセスが捕捉もされず無視もされない信号を受け取って終了した場合、プロセスは終了処理を実行しません。