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

動的リンク(共有ライブラリ)の利点として正しいものはどれか。

  1. A実行環境にライブラリがなくても、必ず動く
  2. B複数のプログラムが1つのライブラリをメモリ上で共有でき、ライブラリを更新すれば作り直さずに修正が反映される
  3. C起動時の処理がまったく不要になり、静的リンクより必ず速く起動する
答えと解説を見る

正解:B. 複数のプログラムが1つのライブラリをメモリ上で共有でき、ライブラリを更新すれば作り直さずに修正が反映される

動的リンクでは、実行ファイルには「どの共有ライブラリのどの関数を使うか」だけを記録し、実行時に動的リンカがライブラリを読み込んで結びつけます。共有ライブラリのコードは書き換えないので、物理メモリ上の1つのコピーを多くのプロセスで共有できます。不具合や脆弱性の修正もライブラリを差し替えるだけで済みます。ただし起動時に結合の手間がかかります。

  • A. ライブラリが見つからないと起動できません。
  • B. 正しい。メモリとディスクの節約にもなります。
  • C. 起動時に結合の処理が必要です。
この分野を解く 分野ページへ

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

  1. 動的リンクを使ったプログラムを別のコンピュータにコピーして実行したら、起動しなかった。最も考えられる原因はどれか。
  2. 静的ライブラリ(.aファイル)と一緒にリンクするとき、リンカが実行ファイルに組み込むものとして正しいものはどれか。
  3. GNUのリンカで「gcc -lmylib main.o」のように、静的ライブラリをそれを使うオブジェクトファイルより前に書くと、未定義の参照のエラーになることがある。その理由として正しいものはどれか。
  4. 位置独立コード(PIC)の説明として正しいものはどれか。
  5. 共有ライブラリで使われるGOT(グローバルオフセットテーブル)の役割として正しいものはどれか。