LINUX.ORG.RU

Мажорные номера версий у симлинков на so-libraries


0

0

Вот что интересно (может быть, вопрос совсем глупый, прошу сильно не
пинать, если так): какие правила линковки к shared library, если на
нее есть некоторое количество симлинков? Например, в RH8 есть такие
файлы:

/usr/lib/libz.so -> /usr/lib/libz.so.1.2.1.1
/usr/lib/libz.so.1 -> /usr/lib/libz.so.1.2.1.1
/usr/lib/libz.so.1.2.1.1

Спрашивается, что пропишется в executable, рожденный gcc-ом с
подключеной libz?

Проверка:

====ztest.c====
int main() {return 0;}
==============
$ gcc ztest.c -o ztest -lz
$ ldd ./ztest
        libz.so.1 => /usr/lib/libz.so.1 (0x00726000)
        libc.so.6 => /lib/tls/libc.so.6 (0x005de000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x005c5000)

objdump показываетс, что в секции NEEDED действительно прописано "libz.so.1".

Почему именно ".so.1"?

В новых дистрибах появилась новая версия libz (1.2.1, насколько я
понимаю). Появляется симлинк libz.so.2, и пропадает симлинк libz.so.
Так что если программа залинкована на libz.so, то скорее всего
работать она не будет. Опять же: как будет использоваться эта 
libz.so.2, если со старых программ на нее нет ссылки? Или libz.so.1=>
libz.so.2?

Так вот вопрос: как компилятор опереляет, к какому симлинку линковать?

Заранее большое спасибо за объяснения.

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.