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

リンカが行うシンボル解決の説明として正しいものはどれか。

  1. Aあるファイルで使われている関数や変数の名前を、別のファイルにあるその定義と対応づける
  2. Bソースコードの変数名を、短い名前に置き換えて読みにくくする
  3. C数学の記号を含む式を、数値に計算し直す
答えと解説を見る

正解:A. あるファイルで使われている関数や変数の名前を、別のファイルにあるその定義と対応づける

main.cでsum関数を呼び、sum.cでその中身を定義すると、main.oには「sumを参照する」、sum.oには「sumを定義する」という情報が入ります。リンカはすべてのオブジェクトファイルのシンボルテーブルを集めて、参照ごとに対応する定義を1つ見つけます。定義が見つからなければ「未定義の参照」、2つ以上あれば「多重定義」のエラーになります。

  • A. 正しい。参照と定義を結びつけます。
  • B. それは難読化で、リンカの仕事ではありません。
  • C. シンボルは関数や変数の名前のことです。
この分野を解く 分野ページへ

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

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