Librerías en Linux
Table of Contents
ToggleIntroducción
Cuando hablamos de librerías en Linux, nos referimos a un archivo que contiene uno o varios programas llamados funciones.
Cuando un programa es compilado (pasado de código fuente a código binario o máquina) bajo Linux, muchas de las funciones que se necesitan provienen de otras funciones ya existentes como las de manejo de disco, memoria, entre otras. Por esta razón, no se van a compilar nuevamente puesto que ya están instaladas. Debido a esto, los programas necesitan compartir librerías.
Para evitar problemas relacionados con la memoria, estos programas apuntan a las librerías que necesitan, estando así, enlazados de forma dinámica. Si un programa detecta que no puede acceder a dichas librerías, lo más probable es que falle en su ejecución, teniendo que cumplir primero con este requerimiento para poder seguir su correcto funcionamiento.
Ubicación
Las librerías suelen estar compartidas y encontrarse en los siguientes directorios:
/lib
/libx32 (librerías de arquitectura 32 bits)
/lib64 (librerías para arquitectura amd64 en distribuciones estilo Red Hat)
/usr/lib
/usr/lib64 (librerías para arquitectura amd64 en distribuciones estilo Red Hat)
/usr/lib/x86_64-linux o /usr/libx64 (librerías para arquitectura amd64 para distribuciones basadas en Debian)
/usr/lib/i386-linux o /usr/libx32 (librerías para arquitectura 32 bits para distribuciones basadas en Debian)
El enlazador dinámico es la herramienta que busca las librerías de acuerdo a las opciones que se usaron para compilar un programa.
Uno de los primeros lugares que buscará dicho enlazador está determinado por la variable LD_LIBRARY_PATH. Generalmente no suele asignarse algún valor a esa variable, ya que es preferible que utilice las librerías predeterminadas. Solamente cuando se está desarrollando una aplicación tendría sentido declararla, por ejemplo:
# export LD_LIBRARY_PATH=/home/usuario-1/mylibs
Además, puede buscar en directorios adicionales determinado por el archivo /etc/ld.so.conf. Podemos ver el contenido de ese archivo así:
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
El contenido nos informa que leerá los archivos que terminen con .conf en el directorio /etc/ld.so.conf.d
Por ejemplo:
# cat /etc/ld.so.conf.d/*.conf
/usr/lib64//bind9-export/
/usr/lib64/qt5-qtwebengine-freeworld
Administración y dependencias
Con el comando ldd podemos ver las librerías compartidas que requiere el programa. Dicho comando, devuelve el nombre de la librería y dónde se supone que debe estar.
Veamos un ejemplo:
Como podemos ver cada librería tiene un apuntador hacia otra, cuya función es su ejecución desde los binarios del directorio /usr. Dicha tarea es realizada por el enlazador dinámico. Cuando se instala una librería en Linux, es necesario actualizar esos enlaces para que los programas dependientes puedan funcionar bien.