1.3.2.- Bibliotecas compartidas

Una desventaja de las bibliotecas estáticas es que cuando se ejecutan varias aplicaciones al mismo tiempo y todas ellas usan funciones de la misma biblioteca,  pueden acabar teniendo muchas copias de las mismas funciones en la memoria y, por lo tanto, muchas copias de sí mismas en los arc hivos de programa. Esto puede ocupar una gran cantidad de memoria necesaria y de espacio en su disco duro.

Muchos sistemas UNIX y las bibliotecas compartidas que aceptan Linux pueden superar esta desventaja. Las bibliotecas compartidas se encuentran en las mismas ubicaciones que las bibliotecas estáticas, pero las primeras tienen un sufijo diferente en el nombre de archivo. En un sistema Linux típico, la versión compartida de la biblioteca de matemáticas estándar es /lib/libm.so.

Libm_ubicacion

Cuando un programa usa una biblioteca compartida, se enlaza de tal manera que no contiene código funcional por sí mismas, sino referencias al código compartido que estará disponible en tiempo de ejecución. Cuando se carga el programa resultante en la memoria que se va a ejecutar, se resuelven las referencias de la función y se realizan las llamadas a la biblioteca compartida, que se cargará en la memoria si fuese necesario.

De esta manera, el sistema puede pedir que varias aplicaciones usen una única copia de la biblioteca compartida al mismo tiempo, y almacenar,  por tanto, dicha copia una sola vez en el disco. Otra ventaja es que la biblioteca compartida se puede actualizar independientemente de las aplicaciones que confían en ella. Se usan los enlaces simbólicos del archivo /lib/libm.so con la revisión real de la biblioteca (/lib/libm.so.N, en la que N representa el número mayor de la revisión, 6 hasta la fecha). Cuando Linux inicia una aplicación, puede tener en cuenta la versión de la biblioteca requerida por la aplicación para evitar que las versiones posteriores de dicha biblioteca dañen a las versiones anteriores.

Podemos saber qué bibliotecas compartidas necesita un programa ejecutando la herramienta ldd. Por ejemplo, si intenta ejecutarlo en su aplicación de prueba obtendrá:

ldd_program

En este caso vemos que la biblioteca C estándar (libc) está compartida (.so). el programa requiere la versión 6.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s