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

Linuxの共有ライブラリで、libfoo.so.1の「.1」のようなsonameのバージョン番号を上げるのは、一般にどのようなときか。

  1. A不具合を1つでも直したとき
  2. Bライブラリのファイルを別のディレクトリに移したとき
  3. C関数の引数や構造体の配置を変えるなど、古いプログラムとのABIの互換性がなくなる変更をしたとき
答えと解説を見る

正解:C. 関数の引数や構造体の配置を変えるなど、古いプログラムとのABIの互換性がなくなる変更をしたとき

動的リンクのプログラムは、sonameで指定した共有ライブラリを実行時に使います。互換性を保った修正なら同じsonameのまま差し替えるだけで、すべてのプログラムに反映されます。一方、引数の型や構造体の大きさを変えると、古いプログラムは間違った前提で呼び出してしまうので、sonameの番号を上げて別のライブラリとして扱い、古い版と並べて置けるようにします。

  • A. 互換性を保つ修正なら番号は変えません。
  • B. 置き場所はバージョンと関係ありません。
  • C. 正しい。古いプログラムが間違って新しい版を使わないようにします。
この分野を解く 分野ページへ

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

  1. Linuxでlddコマンドを実行ファイルに使うと分かることはどれか。
  2. 主なOSで使われる実行ファイルの形式の組み合わせとして正しいものはどれか。
  3. 再帰が深くなりすぎてスタックの上限を超えたとき、Linuxなどで一般に起こることとして正しいものはどれか。
  4. C言語で、初期値を書かない局所変数とグローバル変数の、使い始めたときの値について正しいものはどれか。
  5. mallocとfreeを繰り返すうちに、空きメモリの合計は十分あるのに、大きな領域をまとめて確保できなくなることがある。この現象を何と呼ぶか。