Когда я запускаю 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.