Когда я запускаю 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.so
, я вижу:
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.