PSPであそぼう(4)
実は、前回までに説明したやり方だと、staticなオブジェクトのコンストラクタ/デストラクタが呼び出されていない。
(staticなオブジェクトの)“コンストラクタのリスト”と“デストラクタのリスト”を作成して、それをどこかから(スタートアップルーチン等から)呼び出してやる必要がある。
ソースファイルはコンパイルするごとにオブジェクトファイルを生成する。つまり、呼び出すべきコンストラクタは、各オブジェクトファイルに散在していることになる。それらをひとまとめにして、どこかにそいつらの関数ポインタのリストを作成しなければならない。そんな奇特なこと(?)が出来るのは、唯一、すべてのオブジェクトファイルをひとまとめにしている、リンカ(ld)だけである。
話が煩雑になるのを避けて、以下、ldの話に限定する。
ldにはリンカスクリプトというスクリプトを食わせることが出来る。スクリプトということは、ある程度、なんだって(?)書けちゃうような記述能力があるということだ。だから、コンストラクタのリストを作ってくれるようにこのリンカスクリプトにお願いすると良い。
ldで使用するリンカスクリプトは以下に詳しい説明がある。
http://www.sra.co.jp/wingnut/ld/ld-ja_3.html
(つづく)