Next: , Previous: Interfaces, Up: Versioning


6.2 libtoolのバージョン管理システム

libtoolは独自の公式のバージョン管理システムがあります.それは,あまり 柔軟ではありませんが,強力なバージョン管理システムで,確かに最も単純で す.

ライブラリとは,整数で任意に表示できるインターフェースのいくつかの組を エクスポートするものだと考えて下さい.プログラムがライブラリとリンクさ れるとき,これらのインターフェースのサブセットを利用するかもしれません.

プログラムが使用するインターフェースのlibtoolの記述は単純です.それは, 結果のバイナリにある最大と最小のインターフェースの番号を符号化します (first-interface, last-interface).

ダイナミックリンカは,ライブラリがfirst-interfacelast-interfaceの間のすべてのインターフェースの番号をサポー トする場合,プログラムがライブラリとリンク可能なことを保証します.

libtoolの移植性の要求が,実際に必要と言うよりは厳密なので,問題を生じ る可能性があることに注意してください.

さて,libhelloがインターフェースの5,16,17,18,と19をサポート し,libtoolはlibhellotestにリンクするとき使用されると 仮定します.

libtoolはtestに数字5と19を符号化し,ダイナミックリンカは,5と19 の間のすべてのインターフェースをサポートしているライブラリのみ と,testをリンクします.そのため,ダイナミックリンカは libhellotestをリンクすることを拒否するのです!

この問題を排除するために,libtoolはライブラリは,連続したインターフェー ス番号を宣言することのみ可能としています.そのため,libhelloは, 16 から19までのインターフェースをサポートすることを宣言するのが精一杯 です.そして,ダイナミックリンカは,libhellotestとリン クします.

そのため,libtoolライブラリバージョンは,三つの整数で宣言されます.

current
このライブラリで実装されている,最も新しいインターフェース番号.
revision
currentのインターフェースの実装番号.
age
このライブラリで実装されている,最新と最古のインターフェースの違い.言 い換えると,ライブラリは,current - ageから currentまでの番号の範囲で,すべてのインターフェース番号を 実装しています.

二つのライブラリが,個別のcurrentageを持つ場合,ダイナミッ クリンカは,より大きいrevision番号を選択します.