[devel] Re: soname change
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Ср Май 26 15:19:36 MSD 2004
On Tue, May 18, 2004 at 03:31:22PM +0400, Anton Farygin wrote:
> Nick S. Grechukh пишет:
> >неужели смену soname нельзя отработать симлинками, предоставить и новое и
> >старое имя? не пришлось бы пересобирать кучу софта.
>
> Нельзя. Смена soname как правило означает смену API, т.е. - библиотека с
> более старшим soname не совместима с библиотекой с более младщим soname.
Более подробный ответ:
----- Forwarded message from Alexey Tourbin <at на altlinux> -----
...
> Насчёт soname можно подробнее?
> Что это такое?
Это касается разделяемых библиотек.
API -- это фиксация интерфейса на уровне исходного кода при компиляции.
Например, int myfunc(x,y) -- это часть API.
ABI -- это фиксация бинарного интерфейса на уровне экспортируемых
символов библиотеки. Например, если в новой версии библиотеки будет
int myfunc_new(x,y,z);
#define myfunc(x,y) myfunc_new(x,y,0) /* compatibility */
То API для myfunc(x,y) "как бы" останется, но на самом деле бинарный
интерфейс "поедет", т.к. символа myfunc в библиотеке уже не будет.
Бинарный интерфейс касается не только сигнатур функций, но и, например,
типов данных.
Иными словами, речь идет о том, что программа, слинкованная с новой
версией разделяемой библиотеки, может на самом деле работать и с более
старой версией библиотеки, если у библиотеки не изменился бинарный
интерфейс. И наоборот. В смысле репозитария пакетов это означает
возможность частичного обновления, а также отказ от необходимости
пересборки всех пакетов, которые слинкованы с разделяемой библиотекой,
при обновлении этой библиотеки, если бинарный интерфейс не изменился.
А технически это просто:
ld -soname=lib%name.so.%version ...
gcc -Wl,-soname=lib%name.so.%version ...
В первом случае линкер вызывается напрямую, во втором -- через gcc.
Другое дело, что в данном случае должно означать %version. Я подумаю.
...
----- End forwarded message -----
> Rgds,
> Rider
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20040526/d0b0b7db/attachment-0001.bin>
Подробная информация о списке рассылки Devel