リンカ・ローダと実行形式
コンパイラが1つのソースファイルから出力するオブジェクトファイル(.o)について正しいものはどれか。
- AそのままOSで実行できる完成したプログラムである
- Bソースコードを圧縮しただけのもので、機械語は含まない
- C機械語を含むが、ほかのファイルにある関数や変数の番地はまだ決まっていない
答えと解説を見る
正解:C. 機械語を含むが、ほかのファイルにある関数や変数の番地はまだ決まっていない
オブジェクトファイルには、そのファイルの関数を翻訳した機械語、変数の初期値、定義や参照している名前の一覧(シンボルテーブル)、後から番地を埋める場所の一覧(再配置情報)が入っています。printfのようにほかのファイルにある関数を呼ぶ命令は、番地が分からないので仮の値のままです。リンカが複数のオブジェクトファイルをまとめて番地を決め、実行ファイルを作ります。
- A. 実行するにはリンクが必要です。
- B. 中身は機械語とその付属情報です。
- C. 正しい。番地はリンクのときに決まります。