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

静的ライブラリ(.aファイル)と一緒にリンクするとき、リンカが実行ファイルに組み込むものとして正しいものはどれか。

  1. Aライブラリの中のすべてのオブジェクトファイル
  2. Bライブラリのファイル名だけで、コードは組み込まない
  3. Cライブラリの中のオブジェクトファイルのうち、未定義の参照を解決するのに必要なものだけ
答えと解説を見る

正解:C. ライブラリの中のオブジェクトファイルのうち、未定義の参照を解決するのに必要なものだけ

静的ライブラリは、たくさんのオブジェクトファイルを1つにまとめたアーカイブです。リンカは、まだ定義が見つかっていないシンボルを定義しているオブジェクトファイルだけをアーカイブから取り出して組み込みます。そのため、標準ライブラリのように多くの関数を含むライブラリでも、使った関数の分だけ実行ファイルが大きくなります。

  • A. すべて入れると実行ファイルがむだに大きくなります。
  • B. 名前だけを記録するのは動的リンクです。
  • C. 正しい。使わない部分は入りません。
この分野を解く 分野ページへ

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

  1. GNUのリンカで「gcc -lmylib main.o」のように、静的ライブラリをそれを使うオブジェクトファイルより前に書くと、未定義の参照のエラーになることがある。その理由として正しいものはどれか。
  2. 位置独立コード(PIC)の説明として正しいものはどれか。
  3. 共有ライブラリで使われるGOT(グローバルオフセットテーブル)の役割として正しいものはどれか。
  4. 動的リンクで、PLT(プロシージャリンケージテーブル)を使った遅延束縛(レイジーバインディング)を行う場合の説明として正しいものはどれか。
  5. Linuxで動的リンクのプログラムを起動するときに働く動的リンカ(ld.soなど)の役割として正しいものはどれか。