В Unix-подобных системах динамические разделяемые библиотеки (файлы .so) имеют расширение SONAME
. Его можно извлечь, например, с помощью: readelf -a libfoo.so.0.3.2 | grep SONAME
-> libfoo.so.0
. Последняя часть также называется SOVERSION
. Этот номер версии отмечает версии библиотеки, которые являются двоично-совместимыми (ABI). Поэтому, когда программа ссылается на одну версию библиотеки, она также может использовать более позднюю версию, если SOVERSION
не изменится.
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
изменяется.