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

動的リンクを使ったプログラムを別のコンピュータにコピーして実行したら、起動しなかった。最も考えられる原因はどれか。

  1. A実行ファイルの中にライブラリのコードがすべて入っていて、大きすぎたから
  2. B動的リンクのプログラムは、作ったコンピュータでしか動かない決まりだから
  3. C必要な共有ライブラリが入っていないか、互換性のないバージョンしかない
答えと解説を見る

正解:C. 必要な共有ライブラリが入っていないか、互換性のないバージョンしかない

動的リンクのプログラムは、実行するコンピュータにある共有ライブラリを使います。必要なライブラリがない、または関数が足りない古いバージョンしかないと、動的リンカが結合できず起動に失敗します。Linuxではlddコマンドで、プログラムが必要とする共有ライブラリと、それが見つかるかどうかを確かめられます。配布しやすさを重視して、あえて静的リンクにすることもあります。

  • A. 動的リンクではライブラリのコードは実行ファイルに入りません。
  • B. そのような決まりはありません。
  • C. 正しい。実行環境のライブラリに依存します。
この分野を解く 分野ページへ

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

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