リンカ・ローダと実行形式
Linuxの共有ライブラリで、libfoo.so.1の「.1」のようなsonameのバージョン番号を上げるのは、一般にどのようなときか。
- A不具合を1つでも直したとき
- Bライブラリのファイルを別のディレクトリに移したとき
- C関数の引数や構造体の配置を変えるなど、古いプログラムとのABIの互換性がなくなる変更をしたとき
答えと解説を見る
正解:C. 関数の引数や構造体の配置を変えるなど、古いプログラムとのABIの互換性がなくなる変更をしたとき
動的リンクのプログラムは、sonameで指定した共有ライブラリを実行時に使います。互換性を保った修正なら同じsonameのまま差し替えるだけで、すべてのプログラムに反映されます。一方、引数の型や構造体の大きさを変えると、古いプログラムは間違った前提で呼び出してしまうので、sonameの番号を上げて別のライブラリとして扱い、古い版と並べて置けるようにします。
- A. 互換性を保つ修正なら番号は変えません。
- B. 置き場所はバージョンと関係ありません。
- C. 正しい。古いプログラムが間違って新しい版を使わないようにします。