リンカ
リンカ
モジュールが互いに参照しあっている場合にメモリの位置を決定する。 オブジェクトファイル内のプログラムに含まれるアドレスは、他のモジュールの存在を考慮していない。 オブジェクトファイルは、モジュール(1個のソースコード)から生成される
ここでのモジュールは、1個のソースコードから生成されるものだ
シンボルテーブルでUNDとなっているシンボル
externでシンボルを作るとこうなる
リンカは、globalとexternの組を結びつける
externを使って定義されたシンボルへの参照を、同名のglobalなシンボルが指すアドレスに書き換える
リンカは、複数のオブジェクトファイルを1つにまとめる
リンクする前のオブジェクトファイル
参照先のアドレスが抜け落ちていることがある
リンク対象のファイル群を探索する
参照されているシンボルが定義されているファイルを見つける
シンボルを参照している部分は、探索で見つかったアドレスへの参照に書き換える
セクションが読み込まれる位置が未確定
どのオブジェクトファイルも、とりあえず各々の配置情報を持っている状態
複数のオブジェクトファイルが必要なとき、配置がバッティングしないように調整が必要
配置が確定することでシンボルの指すアドレスが確定する
extern globalを使わなければならないか?
リンクする前は、オブジェクトファイルは環境に依存しない
リンクのタイミングで、リンカ(ldなど)がlibcなどの環境に依存する要素を注入する