在類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
機制決定這樣一個SOVERSION
與current
,revision
和age
。 線索是:current
也在兼容性更改上增加,major = current - age
在大多數系統上用於設置SOVERSION
。
然而,在BSD(FreeBSD的,NetBSD的,OpenBSD系統)的SOVERSION
設置爲current
,這是在幾個地方提到像 suse-wiki, 我還測試了這款提到的平臺上。
現在的問題是:爲什麼libtool在BSD上這樣做? 爲什麼這被認爲是「BSD這樣做的方式」?
這意味着Linux/Darwin/SunOS的每個兼容更改都是BSD不兼容的更改,因爲SOVERSION
更改。
我將libtool跟蹤到2e68bf5aecc88e67b7b33e30802f05585a59e278,此行爲在1999年由Edouard G. Parmelan實施。雖然在提交摘要中甚至沒有提及。 – JonnyJD 2013-03-05 16:19:14
http://tickets.musicbrainz.org/browse/LIB-33中有更多的周邊信息。儘管如此,最重要的環節在於kepstin的回答。 – JonnyJD 2013-03-05 22:47:54