Есть очень неприятная ситуация. Оказывается, требуется более глубокое понимание рзарешения символов в ELF'ах, чем то, которое у меня имеется. Ситуация такая. До последнего времени я думал, что вносить в version script нужно только символы типа "T" и "D", то есть функции и глобальные переменные. Но глобальныме переменные на самом деле бывают двух типов -- "D" и "B" (data и bss). Различие между ними я не совсем понимаю. Иногда мне казалось, что "B" -- это объявление типа "extern int var", которое должно разрешаться в соответствущую пременную "D", объявленную уже без extern. Но это, по-видимому, далеко от истины. $ grep PL_perlio_mutex sym nagios /usr/sbin/nagios B PL_perlio_mutex nginx /usr/sbin/nginx B PL_perlio_mutex perl-base /usr/bin/perl5.8.8 U PL_perlio_mutex perl-base /usr/lib/libperl.so.5.8.8 B PL_perlio_mutex perl-suidperl /usr/bin/sperl5.8.8 U PL_perlio_mutex $ Другими словами, nagios и nginx как бы "ссылаются" на переменную типа "B" в libperl.so.5.8, но эта ссылка почему-то имеет тип "B", а не "U". Замечу, что сам perl ссылается на PL_perlio_mutex через "U". Кто знает в чём тут дело? К сожалению изучить как написан binutils -- это требуется много отваги. Там этот "биг дил" который libbfd он вездесущ и совсем не способствует пониманию кода.