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 ----- ... > Насчёт 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