Динамические библиотеки

20.4. Динамические библиотеки

Текст предоставили Satoshi Asami , Peter Wemm , и David O'Brien 9 декабря 1996.

Если вы добавляете поддержку динамических библиотек к порту или другой части программного обеспечения, которая этой возможностью не обладает, то номера версий должны назначаться по нижеследующим правилам. Как правило, получающиеся номера не имеют ничего общего с номером релиза программного обеспечения.

При построении динамической библиотеки используются три принципа:

  • Начинаем с 1.0

  • Если есть изменение, которое имеет обратную совместимость, увеличиваем младший номер версии (заметьте, что системы ELF его игнорируют)

  • Если есть изменение, не соблюдающее совместимость, увеличиваем старший номер версии

К примеру, добавление функций и исправление ошибок приводит к увеличению младшего номера версии, а удаление функций, изменение синтаксиса вызова функции и тому подобные изменения приводят к изменению старшего номера версии.

Следуйте схеме нумерации версий в форме старший.младший (x.y). Наш динамический загрузчик формата a.out не умеет нормально работать с номерами версий в форме x.y.z. Любой номер версии после y (то есть третье число) полностью игнорируется при сравнении номеров версий динамических библиотек для определения того, с какой библиотекой осуществлять компоновку. Если есть две динамические библиотеки, отличающиеся только "микро"-номером версии, то ld.so будет осуществлять компоновку с наибольшим номером. Другими словами: если вы компонуете с libfoo.so.3.3.3, то компоновщик запишет в заголовках только 3.3 и будет выполнять компоновку с любой библиотекой, начинающейся с libfoo.so.3.(все, что >= 3).(наибольшее из доступного).

Note: ld.so всегда будет использовать наибольшую "младшую" версию. Иными словами: он будет предпочитать использовать libc.so.2.2, а не libc.so.2.0, даже если программа изначально была скомпонована с libc.so.2.0.

Вдобавок наш динамический компоновщик ELF совсем не работает с младшими версиями. Однако все же нужно указывать старший и младший номер версии, а наши файлы Makefile "сделают все как нужно" в зависимости от типа системы.

Для библиотек не в составе портов, имеется наше соглашение на изменение номера версии динамической библиотеки только один раз между релизами. Кроме того, есть договоренность на изменение старшего номера динамической библиотеки только один раз между главными релизами ОС. А именно: X.0 на (X+1).0. Когда вы делаете изменение в системной библиотеке, которое требует увеличения номера версии, посмотрите журналы коммитов изменений в файле Makefile. Коммиттер отвечает за то, что первое такое изменение с момента релиза приведет к обновлению номера версии динамической библиотеки в файле Makefile, а при других последующих изменениях этого бы не делалось.