On Sun, Aug 13, 2006 at 04:13:09PM +0400, Sergey Vlasov wrote: > On Sun, Aug 13, 2006 at 11:51:58AM +0400, Alexey Tourbin wrote: > > Одинаковые символы с разными версиями -- это уже black magic, который > > нужен только для библиотек типа glibc, от которых зависит сто тыщ мильён > > пакетов. > > > > Тут можно сделать вот что: > > > > 1) сменить soname; или > > 2) повесить все функции, которые используют новые флаги, на новый > > интерфейс 1.2; *и* удалить все старые интерфейсы, на которых висели > > какие-либо из этих функций. Поскольку интерфейсов до этого не было, > > фактически имеет смысл повесить все экспортируемые функции на интерфейс 1.2. > > А вот это, к сожалению, не работает. В dsohowto написано, что по > такому принципу работает symbol versioning в Solaris: при внесении в > интерфейс изменений, которые расширяют функциональность, но не ломают > совместимость со старыми бинарниками, соответствующие символы в > map-файле _переносятся_ в новую версию, базирующуюся на старой. При > запуске старых приложений, когда dynamic linker обнаруживает, что > символ с нужной версией отсутствует в библиотеке, в Solaris он может > вместо запрошенной версии использовать более позднюю. Однако в Linux > такой фокус не проходит - требуется именно символ со старой версией, > автозамена на более новую версию не производится. Я и говорю: если удалить старый интерфейс полностью, то будет анмет.