21.4. 共有ライブラリ

Contributed by 浅見 賢 , Peter Wemm , and David O'Brien . 9 December 1996.

もしあなたが共有ライブラリをサポートする機能を port に追加した り, 共有ライブラリをサポートしていない他のソフトウェアに追加する 場合には, 共有ライブラリのバージョン番号を次の規則にしたがって つけてください. 一般的には, この規則は, ソフトウェアのリリースバージョンとは 全く関係ありません.

共有ライブラリを作成する三つの重要な規則は 次の通りです:

例えば, 機能追加とバグ吸収の場合は, マイナー番号を増やします. 機能削除, 関数呼び出しのシンタックスなどが変更された場合は, 強制的にメジャー番号を変更します.

メジャー.マイナーー (x,y) の形式のバージョン番号を使用します. FreeBSD における a.out 形式のダイナミックリンカは, x.y.z という形式のバージョン番号 は扱えません. この場合, y の後のバージョン番号 (つまり三つ目の数字)は, どのライブラリがリンクされているかを決めるために, 共有ライブラ リ番号を比較する際に, すべて無視されます. "小さな"リビジョンだけが 異なる二つの共有ライブラリが指定 されると, ld.so は, リビジョンの大きい方の共有ライブラリを リンクします. すなわち, もしあなたが libfoo.so.3.3.3 をリンク していたとすると, リンカは頭の 3.3 という部分だけを認識し, libfoo.so.3 ではじまり その後に 3 以上の数字が続くもののうち, 最も大きい番号 の付いているライブラリをリンクします.

Note: ld.so はいつも最も大きい "マイナー" リビジョンのものを使うことに 注意してください. 例えば, プログラムがはじめ libc.so.2.0 を リンクしていたとしても, libc.so.2.0 よりも libc.so.2.2 を優先して使用します.

さらに, ELF ダイナミックリンカはマイナーバージョンを全く扱いません. しかし, 作成した Makefile がそのようなシステムでも 「きちんと動作できる」ように, メジャー番号およびマイナー番号を 指定する必要があります.

移植されていないライブラリに対しては, 共有ライブラリのバージョン番号はリリースごとに一度だけ変更し, また, 主要な共有ライブラリのバージョン番号は, OS の主リリースごとに 一度だけ変更する, というのが私たちのポリシーです. つまり, X.0 は (X+1).0 になります. あなたがシステムライブラリのバージョン番号を上げた場合は, Makefile の commit ログを確認してください. 結果としてそのリリースには, 共有ライブラリのバージョン番号が アップデートされた Makefile に入るので, 最初にその変更を 確かめるのがソースツリー管理者 ("committer") の責務です. その後のどんな変更も, そのリリースには入りません.