次: Updating version info, 前: Interfaces, 上: Versioning
libtoolは独自の公式のバージョン管理システムがあります.それは,あまり 柔軟ではありませんが,強力なバージョン管理システムで,確かに最も単純で す.
ライブラリとは,整数で任意に表示できるインターフェースのいくつかの組を エクスポートするものだと考えて下さい.プログラムがライブラリとリンクさ れるとき,これらのインターフェースのサブセットを利用するかもしれません.
プログラムが使用するインターフェースのlibtoolの記述は単純です.それは, 結果のバイナリにある最大と最小のインターフェースの番号を符号化します (first-interface, last-interface).
ダイナミックリンカは,ライブラリがfirst-interfaceと last-interfaceの間のすべてのインターフェースの番号をサポー トする場合,プログラムがライブラリとリンク可能なことを保証します.
libtoolの移植性の要求が,実際に必要と言うよりは厳密なので,問題を生じ る可能性があることに注意してください.
さて,libhelloがインターフェースの5,16,17,18,と19をサポート し,libtoolはlibhelloをtestにリンクするとき使用されると 仮定します.
libtoolはtestに数字5と19を符号化し,ダイナミックリンカは,5と19 の間のすべてのインターフェースをサポートしているライブラリのみ と,testをリンクします.そのため,ダイナミックリンカは libhelloとtestをリンクすることを拒否するのです!
この問題を排除するために,libtoolはライブラリは,連続したインターフェー ス番号を宣言することのみ可能としています.そのため,libhelloは, 16 から19までのインターフェースをサポートすることを宣言するのが精一杯 です.そして,ダイナミックリンカは,libhelloをtestとリン クします.
そのため,libtoolライブラリバージョンは,三つの整数で宣言されます.
-
ageから
currentまでの番号の範囲で,すべてのインターフェース番号を
実装しています.
二つのライブラリが,個別のcurrentとageを持つ場合,ダイナミッ クリンカは,より大きいrevision番号を選択します.