El comando ldconfig se usa para informar al sistema sobre nuevas ubicaciones de bibliotecas compartidas. La información de usos proporcionada por el /etc/ld.so.conf archivo de configuración.
El comando ldconfig crea una base de datos de caché de todas las bibliotecas según el archivo de configuración. Este caché normalmente se almacena en el /etc/ld.so.cache expediente.
Esta es la sintaxis del comando ldconfig:
# ldconfig [option]
La siguiente tabla describe opciones útiles para el comando ldconfig:
Opción | Descripción |
---|---|
-v | Detallado; imprimir información adicional. |
-n | Utilice una opción de línea de comandos para especificar la ubicación de nuevas bibliotecas compartidas. Ejemplo:ldconfig -n /algún/directorio. |
-f | Especifique un archivo de configuración diferente al predeterminado (/etc/ld.so.conf ). |
-p | Utilice para imprimir una lista de bibliotecas actuales almacenadas en el archivo de caché. |
Archivo de configuración /etc/ld.so.conf
El archivo de configuración principal para bibliotecas compartidas es el archivo /etc/ld.so.conf; sin embargo, normalmente solo hay una línea en este archivo:
# cat /etc/ld.so.conf include ld.so.conf.d/*.conf
La línea de inclusión en este archivo le dice al sistema que también use todos los archivos de configuración en el directorio especificado. En el caso del ejemplo anterior, serían todos los archivos que terminan en “.conf” en el directorio /etc/ld.so.conf.d.
El archivo de configuración en sí es simple. Solo contiene un directorio en el que se almacenan las bibliotecas compartidas:
# more /etc/ld.so.conf.d/libiscsi-x86_64.conf /usr/lib64/iscsi # ls /usr/lib64/iscsi libiscsi.so.2 libiscsi.so.2.0.10900
Lista de bibliotecas almacenadas en caché
Para enumerar las bibliotecas almacenadas en caché, puede usar la opción -p del comando ldconfig como se muestra a continuación:
# ldconfig -p | more 784 libs found in cache `/etc/ld.so.cache' p11-kit-trust.so (libc6,x86-64) => /lib64/p11-kit-trust.so libz.so.1 (libc6,x86-64) => /lib64/libz.so.1 libyaml-0.so.2 (libc6,x86-64) => /lib64/libyaml-0.so.2 libyajl.so.2 (libc6,x86-64) => /lib64/libyajl.so.2 libxtables.so.10 (libc6,x86-64) => /lib64/libxtables.so.10 libxslt.so.1 (libc6,x86-64) => /lib64/libxslt.so.1 libxshmfence.so.1 (libc6,x86-64) => /lib64/libxshmfence.so.1 libxml2.so.2 (libc6,x86-64) => /lib64/libxml2.so.2 libxmlrpc_util.so.3 (libc6,x86-64) => /lib64/libxmlrpc_util.so.3 libxmlrpc_server_cgi.so.3 (libc6,x86-64) => /lib64/libxmlrpc_server_cgi.so.3 libxmlrpc_server_abyss.so.3 (libc6,x86-64) => /lib64/libxmlrpc_server_abyss.so.3 ....
Agregar nuevas bibliotecas usando ldconfig
Para agregar nuevas bibliotecas compartidas al sistema, primero debe descargar las bibliotecas al sistema y colocarlas en un directorio. Después de agregar nuevas bibliotecas, debe crear un archivo de configuración en el directorio /etc/ld.so.conf.d y luego ejecutar el comando ldconfig. Todas estas tareas deben realizarse como usuario root:
# ls /usr/lib64/test mylib.so.1 # cat /etc/ld.so.conf.d/libtest.conf /usr/lib64/test # ldconfig
Si el comando ldconfig se ejecuta con éxito, no habrá salida.
Variable LD_LIBRARY_PATH
Los usuarios regulares no pueden ejecutar con éxito el comando ldconfig; sin embargo, si un usuario normal quiere usar una biblioteca compartida personalizada, ese usuario puede descargar este archivo en su directorio de inicio y usar LD_LIBRARY_PATH para indicar la ubicación de los archivos de la biblioteca personalizada, así:
$ ls /home/testuser/lib mylib.so.1 $ LD_LIBRARY_PATH=/home/testuser/lib
Si se ejecuta de manera útil, el último comando no debería producir ningún resultado. Para que esto sea un cambio permanente, coloque el LD_LIBRARY_PATH=/home/testuser/lib Comando en tu ~/.bashrc archivo.
$ vi ~/.bashrc LD_LIBRARY_PATH=/home/testuser/lib export LD_LIBRARY_PATH
Comando ldd
Puede ver qué bibliotecas compartidas usa un comando específico usando el comando ldd. Esta es la sintaxis del comando ldd:
# ldd [options] FILE
Por ejemplo:
# ldd /bin/ls linux-vdso.so.1 => (0x00007ffee2b3f000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007ff5a6c22000) libcap.so.2 => /lib64/libcap.so.2 (0x00007ff5a6a1d000) libacl.so.1 => /lib64/libacl.so.1 (0x00007ff5a6814000) libc.so.6 => /lib64/libc.so.6 (0x00007ff5a6447000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007ff5a61e5000) libdl.so.2 => /lib64/libdl.so.2 (0x00007ff5a5fe1000) /lib64/ld-linux-x86-64.so.2 (0x00007ff5a6e49000) libattr.so.1 => /lib64/libattr.so.1 (0x00007ff5a5ddc000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff5a5bc0000)
El propósito de usar el comando ldd es solucionar problemas con el código que está escribiendo. Este comando le dice no solo a qué bibliotecas se está llamando, sino específicamente desde qué directorio se está llamando a cada biblioteca. Esto puede ser extremadamente útil cuando una biblioteca no se comporta como se esperaría.
La siguiente tabla describe opciones útiles para el comando ldd:
Opción | Descripción |
---|---|
-v | Detallado; imprimir información adicional. |
-u | Muestra las dependencias directas no utilizadas. |