Как определяются пути зависимостей разделяемых библиотек в Linux?

Когда я запускаю ldd против совместно используемой библиотеки, такой как libphp5.so Я вижу, что она зависит от libmysqlclient.so.16 :

$ ldd ./libphp5.so
libmysqlclient.so.16 => /usr/lib/mysql/libmysqlclient.so.16 
[other dependencies snipped out]

Это имена файлов и пути зависимостей ( / usr / lib / mysql / libmysqlclient.so.16 ) запекли в двоичный файл разделяемой библиотеки? Или этот путь определяется каким-то другим способом, например, через /etc/ld.so.conf.d/mysql-i386.conf , который, кстати, содержит:

/usr/lib/mysql/

Еще одна вещь меня озадачивает:

У меня есть разделяемая библиотека, которую я компилирую из исходников. Это зависит от libmysqlclient_r . Компилятор gcc переключается для создания этой библиотеки, которая выглядит так:

gcc -shared -L/usr/lib/mysql -lmysqlclient_r [+various other switches]

Когда я выполняю ldd mylib.поэтому я вижу:

libmysqlclient_r.so.16 => /usr/lib/mysql/libmysqlclient_r.so.16 (0x0055c000)

Однако в каталоге / usr / lib / mysql я вижу:

-rwxr-xr-x. libmysqlclient_r.so -> libmysqlclient_r.so.16.0.0
lrwxrwxrwx. libmysqlclient_r.so.16 -> libmysqlclient_r.so.16.0.0
-rwxr-xr-x. libmysqlclient_r.so.16.0.0
lrwxrwxrwx. libmysqlclient.so -> libmysqlclient.so.16.0.0
lrwxrwxrwx. libmysqlclient.so.16 -> libmysqlclient.so.16.0.0
-rwxr-xr-x. libmysqlclient.so.16.0.0

libmysqlclient_r.so - это символическая ссылка на libmysqlclient_r.so. 16.0.0 , так почему же ldd показывает зависимость как libmysqlclient_r.so.16 . Есть ли какая-то магия, которую мне здесь не хватает?

Я много лет занимаюсь разработкой Windows, я немного новичок в gcc и разработке под Linux.

Мой дистрибутив Linux - CentOS 6.0 x86-32bit.

13
задан Kev 17 November 2011 в 16:18
поделиться