2008-10-03 4 views
16

Digamos que he agregado una biblioteca foo.so.1.1.1 a una ruta que se incluye en /etc/ld.so.conf Cuando ejecuto ldconfig en el sistema obtengo los enlaces foo.so.1.1 y foo. so.1 a foo.so.1.1.1Linux - Usando ldconfig

¿Cómo puedo cambiar el comportamiento para obtener también el enlace foo.so a foo.so.1.1.1?

+0

http://stackoverflow.com/questions/462100/bash-script-to-create-symbolic-links-to-shared-libraries/8144642#8144642 – user1016736

Respuesta

24

ldconfig mira dentro de todos los objetos compartidos que encuentra, para buscar el soname. Luego crea un enlace usando ese soname como el nombre del enlace. Es convencional (pero está lejos de ser universal) que el soname sea el nombre y la versión principal de la biblioteca, por lo que su biblioteca foo.so.1.1 tendrá un soname de foo.so.1 y ldconfig creará un enlace llamado así.

Ninguna parte del sistema de tiempo de ejecución busca o conoce algo sobre el nombre foo.so. Eso se usa cuando vincula sus programas a la biblioteca. No tiene sentido tener ese enlace a menos que también tenga todos los otros archivos de desarrollo (encabezados, etc.) para la biblioteca, por lo que no tiene sentido que ldconfig lo cree automáticamente. Y dado que el nombre del enlace a utilizar es solo otra convención, y en este caso no se almacena dentro del archivo, no hay forma de que ldconfig sepa qué nombre crear.

Normalmente esto se crearía manualmente, en el destino de instalación del Makefile; cuando una biblioteca se empaqueta para una distribución de Linux, el vínculo normalmente vive en el paquete -dev junto con los archivos de encabezado.

3

Simplemente haga el mismo enlace simbólico:

ln -s /usr/lib/foo.so.1.1.1 /usr/lib/foo.so 

Tenga en cuenta que para las aplicaciones utilizar las bibliotecas de esta manera, tienen que estar vinculados de forma explícita en contra del objeto compartido no versionado. IE: este es un mecanismo para eludir por completo el sistema de coincidencia de versiones del cargador dinámico.

Cuestiones relacionadas