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 такой фокус не проходит - требуется именно символ со старой версией, автозамена на более новую версию не производится.