Unix ライクなシステムでは、動的共有ライブラリ (.so ファイル) には .so ファイルがありSONAME
ます。たとえば、
readelf -a libfoo.so.0.3.2 | grep SONAME
->で抽出できますlibfoo.so.0
。最後の部分は とも呼ばれSOVERSION
ます。そのバージョン番号は、バイナリ互換 (ABI) であるライブラリのバージョンを示します。そのため、プログラムがライブラリの 1 つのバージョンにリンクすると、変更がなければ新しいバージョンを使用することもできSOVERSION
ます。
Libtoolには、、 、などを-version-info
決定するメカニズムがあります。手がかりは次のとおりです。 は互換性のある変更でも増加し、ほとんどのシステムで を設定するために使用されます。SOVERSION
current
revision
age
current
major = current - age
SOVERSION
ただし、BSD (FreeBSD、NetBSD、OpenBSD) ではSOVERSION
が に設定されており、これはsuse-wikicurrent
などのいくつかの場所で言及さ
れており、言及されたプラットフォームでもこれをテストしました。
問題は、libtool が BSD でこれを行うのはなぜですか? これが「BSD がこれを行う方法」と見なされるのはなぜですか?
つまり、Linux/Darwin/SunOS のすべての互換性のある変更は、BSD の互換性のない変更ですSOVERSION
。