Comprensión de las bibliotecas compartidas en Linux
En programación, una biblioteca es una variedad de piezas de código precompiladas que se pueden reutilizar en un programa. Las bibliotecas simplifican la vida de los programadores, ya que proporcionan funciones, rutinas, clases, estructuras de datos reutilizables, etc. (escritas por otro programador), que pueden usar en sus programas.
Por ejemplo, si usted está creando una aplicación que necesita realizar operaciones matemáticas, no tiene que crear una nueva función matemática para eso, simplemente puede usar funciones existentes en bibliotecas para ese lenguaje de programación.
Ejemplos de bibliotecas en Linux incluir libc. (la biblioteca C estándar) o glibc. (versión GNU de la biblioteca C estándar), libcurl. (biblioteca de transferencia de archivos multiprotocolo), libcrypt. (biblioteca utilizada para cifrado, hash y codificación en C) y muchos más.
Linux admite dos clases de bibliotecas, a saber:
- Bibliotecas estáticas. están vinculadas a un programa de forma estática en el momento de la compilación.
- Bibliotecas dinámicas o compartidas. se cargan cuando se inicia un programa. ched y se cargan en la memoria y el enlace se produce en tiempo de ejecución.
Las bibliotecas dinámicas o compartidas se pueden clasificar en:
- Bibliotecas vinculadas dinámicamente. aquí un programa está vinculado con la biblioteca compartida y el kernel carga la biblioteca (en caso de que no esté en la memoria) al ejecutarse.
- Bibliotecas cargadas dinámicamente. el programa toma el control total llamando a las funciones con la biblioteca.
Convenciones de nomenclatura de bibliotecas compartidas freestar.config.enabled_slots.push
Bibliotecas compartidas se nombran de dos formas: el nombre de la biblioteca (también conocido como soname. y un “nombre de archivo” (ruta absoluta al archivo que almacena el código de la biblioteca).
Por ejemplo, el soname. para libc. es libc.so.6. donde lib. es el prefijo, c. es un nombre descriptivo, por lo que significa objeto compartido, y 6. es th e versión. Y su nombre de archivo es: /lib64/libc.so.6. Tenga en cuenta que el soname es en realidad un enlace simbólico al nombre del archivo.
Ubicación de bibliotecas compartidas en Linux
Las bibliotecas compartidas se cargan con ld.so. (o ld.so.x. y los programas ld-linux.so. (o ld-linux.so.x. , donde x. es la versión. En Linux, /lib/ld-linux.so.x. busca y carga todas las bibliotecas compartidas utilizadas por un programa.
Un programa puede llamar a una biblioteca usando su nombre de biblioteca o nombre de archivo, y una ruta de biblioteca almacena directorios donde se pueden encontrar bibliotecas en el sistema de archivos. De forma predeterminada, las bibliotecas se encuentran en /usr/local/lib. /usr/local/lib64. /usr/lib. y /usr/lib64. las bibliotecas de inicio del sistema están en /lib. y /lib64. Sin embargo, los programadores pueden instalar bibliotecas en ubicaciones personalizadas.
La ruta de la biblioteca se puede definir en el archivo /etc/ld.so.conf. que puede editar con un editor de línea de comandos .
# vi/etc/ld.so.conf
Las líneas de este archivo indican al kernel que cargue el archivo en /etc/ld.so.conf.d. . De esta forma, los encargados del mantenimiento de paquetes o los programadores pueden agregar sus directorios de bibliotecas personalizadas a la lista de búsqueda.
Si busca en el directorio /etc/ld.so.conf.d. Veré los archivos .conf. para algunos paquetes comunes (kernel, mysql y postgresql en este caso):
# ls/etc/ld.so.conf.d kernel-2.6.32-358.18.1.el6.x86_64.conf kernel-2.6.32-696.1.1.el6.x86_64.conf mariadb-x86_64.conf kernel-2.6.32-642.6.2.el6.x86_64. conf kernel-2.6.32-696.6.3.el6.x86_64.conf postgresql-pgdg-libs.conf
Si echa un vistazo a mariadb-x86_64.conf, verá una ruta absoluta a las bibliotecas del paquete.
# cat mariadb-x86_64.conf. usr/lib64/mysql
El método anterior establece la ruta de la biblioteca de forma permanente. Para configurarlo temporalmente, use la variable de entorno LD_LIBRARY_PATH. en la línea de comando. Si desea que los cambios sean permanentes, agregue esta línea en el archivo de inicialización del shell /etc/profile. (global) o ~/.profile. (específico del usuario).
# export LD_LIBRARY_PATH =/ruta/a/biblioteca/archivo Administrar bibliotecas compartidas en Linux
Veamos ahora cómo tratar las bibliotecas compartidas. Para obtener una lista de todas las dependencias de bibliotecas compartidas para un archivo binario, puede utilizar la utilidad ldd. La salida de ldd. tiene el formato:
nombre de la biblioteca => nombre de archivo (algún valor hexadecimal) O nombre de archivo (algún valor hexadecimal) # esto se muestra cuando el nombre de la biblioteca no se puede leer
Este comando muestra todas las dependencias de la biblioteca compartida para el comando ls.
# ldd/usr/bin/ls O # ldd/bin/ls Salida de muestra linux-vdso.so.1 => (0x00007ffebf9c2000) libselinux.so.1 =>/lib64/libselinux.so.1 (0x0000003b71e00000 ) librt.so.1 =>/lib64/librt.so.1 (0x0000003b71600000) libcap.so.2 =>/lib64/libcap.so.2 (0x0000003b76a00000) libacl.so.1 =>/lib64/libacl.so .1 (0x0000003b75e00000) libc.so.6 =>/lib64/libc.so.6 (0x0000003b70600000) libdl.so.2 =>/lib64/libdl.so.2 (0x0000003b70a00000)/lib64/ld-linux-x86-64.so.2 (0x0000561abfc09000) libpthread.so.0 =>/lib64/libpthread.so.0 (0x0000003b70e00000) libattr.so.1 =>/lib64/libattr.so.1 (0x0000003b75600000)
Porque las bibliotecas compartidas puede existir en muchos directorios diferentes, buscar en todos estos directorios cuando se inicia un programa sería muy ineficaz: lo cual es una de las probables desventajas de las bibliotecas dinámicas. Por lo tanto, se emplea un mecanismo de almacenamiento en caché, realizado por el programa ldconfig.
Por defecto, ldconfig. lee el contenido de /etc/ld .so.conf. crea los enlaces simbólicos apropiados en los directorios de enlaces dinámicos y luego escribe un caché en /etc/ld.so.cache. que luego es usado fácilmente por otros programas.
Esto es muy importante, especialmente cuando acaba de instalar nuevas bibliotecas compartidas o ha creado la suya propia, o ha creado nuevos directorios de bibliotecas. Debe ejecutar el comando ldconfig. para efectuar los cambios.
# ldconfig O # ldconfig-v # muestra los archivos y directorios con los que trabaja
Después de crear su biblioteca compartida, debe instalar eso. Puede moverlo a cualquiera de los directorios estándar mencionados anteriormente y ejecutar el comando ldconfig.
Alternativamente, ejecute el siguiente comando para crear enlaces simbólicos desde el soname. al nombre del archivo:
# ldconfig-n/path/to/your/shared/libraries
Para comenzar a crear sus propias bibliotecas, consulte esta guía del Proyecto de documentación de Linux (TLDP) .
¡Eso es todo por ahora! En este artículo, le brindamos una introducción a las bibliotecas, explicamos las bibliotecas compartidas y cómo administrarlas en Linux. Si tiene alguna consulta o ideas adicionales para compartir, utilice el formulario de comentarios a continuación.