[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