2013-03-05 18 views
3

在類Unix系統上,動態共享庫(.so文件)有SONAME。 它可以通過例如: readelf -a libfoo.so.0.3.2 | grep SONAME - >libfoo.so.0來提取。 最後一部分也被稱爲SOVERSION。 該版本號標記了二進制兼容庫(ABI)的版本。 因此,當程序鏈接到庫的一個版本時,如果SOVERSION沒有更改,它也可以使用更高版本。爲什麼libtool的「current」在BSD上被用作「SOVERSION」,而不是「major」?

Libtool-version-info機制決定這樣一個SOVERSIONcurrentrevisionage。 線索是:current也在兼容性更改上增加,major = current - age在大多數系統上用於設置SOVERSION

然而,在BSD(FreeBSD的,NetBSD的,OpenBSD系統)的SOVERSION設置爲current,這是在幾個地方提到像 suse-wiki, 我還測試了這款提到的平臺上。

現在的問題是:爲什麼libtool在BSD上這樣做? 爲什麼這被認爲是「BSD這樣做的方式」?

這意味着Linux/Darwin/SunOS的每個兼容更改都是BSD不兼容的更改,因爲SOVERSION更改。

+0

我將libtool跟蹤到2e68bf5aecc88e67b7b33e30802f05585a59e278,此行爲在1999年由Edouard G. Parmelan實施。雖然在提交摘要中甚至沒有提及。 – JonnyJD 2013-03-05 16:19:14

+0

http://tickets.musicbrainz.org/browse/LIB-33中有更多的周邊信息。儘管如此,最重要的環節在於kepstin的回答。 – JonnyJD 2013-03-05 22:47:54

回答

3

根據至少一個開發誰的GNU郵件列表上發佈,這可以被認爲是一個錯誤:

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

在郵件中也充滿了對庫版本的政策,各種BSD系統有益借鑑,這似乎與libtool的行爲相矛盾

+0

似乎與IRIX版本相似:https://lists.gnu.org/archive/html/bug-libtool/2002-01/msg00003.html他們爲某些本地文件夾和2002年的某些規範添加了+1已經不知道爲什麼這將是有道理的。實際上,版本0沒有問題。 – JonnyJD 2013-03-05 22:29:49

相關問題