リンカ・ローダと実行形式

リンカの主な役割として正しいものはどれか。

  1. A複数のオブジェクトファイルやライブラリを結合し、名前を番地に結びつけて実行ファイルを作る
  2. Bソースコードの文法の誤りを見つけて知らせる
  3. C実行中のプログラムのメモリを、使い終わったら自動で解放する
答えと解説を見る

正解:A. 複数のオブジェクトファイルやライブラリを結合し、名前を番地に結びつけて実行ファイルを作る

リンカは、各オブジェクトファイルで参照されている名前(シンボル)を、どこかで定義されている実体と対応づけ(シンボル解決)、各ファイルのコードとデータを並べて最終的な番地を決め、命令の中の仮の番地を正しい値に書き換え(再配置)ます。必要ならライブラリから関数を取り出して加えます。こうして、OSが読み込んで実行できる実行ファイルができあがります。

  • A. 正しい。シンボル解決と再配置を行います。
  • B. 文法の誤りはコンパイラが見つけます。
  • C. それはガベージコレクタの仕事です。
この分野を解く 分野ページへ

リンカ・ローダと実行形式のほかの問題

  1. リンカが行うシンボル解決の説明として正しいものはどれか。
  2. リンカが行う再配置(リロケーション)の説明として正しいものはどれか。
  3. C言語のプログラムをリンクしたときに「undefined reference to `foo'」(fooへの未定義の参照)というエラーが出た。最も考えられる原因はどれか。
  4. a.cとb.cの両方で、static を付けない同じ名前のグローバル関数 void init(void) を定義してリンクした。起こることとして正しいものはどれか。
  5. C言語で関数にstaticを付けて定義したとき(例: static int helper(void))の効果として正しいものはどれか。