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