Cuando corro ldd
contra una biblioteca compartida como libphp5.so
veo que tiene una dependencia en libmysqlclient.so.16
:¿Cómo se determinan las rutas de dependencia de bibliotecas compartidas en Linux?
$ ldd ./libphp5.so libmysqlclient.so.16 => /usr/lib/mysql/libmysqlclient.so.16 [other dependencies snipped out]
Son estos los nombres de archivo de dependencia y caminos (/usr/lib/mysql/libmysqlclient.so.16
) al horno en el binario de biblioteca compartida? O es este camino determinado por algún otro medio, como a través de /etc/ld.so.conf.d/mysql-i386.conf
, que contiene dicho sea de paso:
/usr/lib/mysql/
Otra cosa que me es desconcertante:
hay una biblioteca compartida que tengo que puedo compilar desde las fuentes. Esto tiene una dependencia en libmysqlclient_r
. Los gcc
modificadores del compilador para producir este aspecto esta biblioteca como:
gcc -shared -L/usr/lib/mysql -lmysqlclient_r [+various other switches]
Cuando hago ldd mylib.so
veo:
libmysqlclient_r.so.16 => /usr/lib/mysql/libmysqlclient_r.so.16 (0x0055c000)
Sin embargo, en el directorio /usr/lib/mysql
veo:
-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
es un enlace simbólico a libmysqlclient_r.so.16.0.0
, entonces ¿por qué ldd
muestra la dependencia como libmysqlclient_r.so.16
. ¿Hay algo de magia que me falta aquí?
Después de haber sido un desarrollador de Windows durante muchos años, soy un poco nuevo en gcc
y desarrollo en Linux.
Mi distribución de Linux es CentOS 6.0 x86-32bit.
Gracias, eso es algunos consejos útiles. – Kev
No tiene idea, pero me gustaría poder recomendar esto aún más. Mi pregunta surgió de la imposibilidad de cargar 'libmysqlclient_r' utilizado en un paquete de tienda de queso de Python (MySQL-Python) a pesar de que compila/construye muy bien. 'LD_DEBUG = libs ldd' era mi vida más segura. Resulta que el archivo de ruta guardado en '/ etc/ld.co.conf.d' no terminó en' .conf' y mi archivo '/ etc/ld.so.conf' especifica:' include ld.so. conf.d/*. conf'. Por lo tanto, nunca se realizó una búsqueda en la carpeta '/ usr/lib/mysql'. – Kev