4

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

4

1 に答える 1

4

GNUメーリングリストに投稿した少なくとも1人の開発者によると、これはバグと見なされる可能性があります。

https://lists.gnu.org/archive/html/bug-libtool/2011-05/msg00007.html

その電子メールには、libtoolの動作と矛盾しているように見えるさまざまなBSDへのライブラリバージョン管理ポリシーへの有用な参照もたくさんあります。

于 2013-03-05T21:02:54.937 に答える