Publicidad

jueves, 5 de junio de 2008

Notas sobre Librerias Estaticas

Hola Compañeros!!!
En esta ocasión y puesto que no hemos visto ningún tema nuevo seguiré con las librerías, para esto me dispuse a crear un resumen de lo que son las librerías dinámicas y estáticas (del material que presento el maestro en clase) para que pudiera que dar mas claro.
Una de las características principales de Linux es la forma de utilizar las librerias. Para empezar diremos que existen dos tipos:
  • Librerías compartidas de carga dinámica ( .so)
  • Librerías estáticas (.a )
Definimos librería como archivos que contienen código que a menudo es usado por más de un programa. Esto tiene la ventaja de que cada programa no necesita duplicar el código (y el riesgo de introducir errores), sino que le basta con llamar a las funciones de las librerías instaladas en el sistema. El ejemplo más obvio de este grupo de librerías es glibc, una de las más utilizadas en el mundo Linux, esta contiene todas las funciones de la librería C que utilizan los programas. Ahora entremos en detalles sobre los dos tipos de librerías.

Las librerías compartidas (normalmente libXXX.so,) son cargadas en memoria en tiempo de ejecución a partir de una copia compartida (de aquí el nombre). El funcionamiento es similar a las famosas
DLLs de sistemas Microsoft.

Las librerías estáticas ( libXXX.a ) en realidad se enlazan dentro del propio ejecutable, lo que hace que el archivo del programa sea más grande. Con frecuencia se encontrarán en el sistema las copias estática y compartida de la misma librería

Como hemos dicho, en Linux existen dos tipos de bibliotecas: las estáticas y las compartidas (dinámicas). Las bibliotecas estáticas son colecciones de módulos introducidos en un archivo con la utilidad ar(1) e indexados sus símbolos con la utilidad ranlib(1). Estos archivos suelen almacenarse en archivos terminados en .a (no utilizaré el termino extensión, ya que en Linux no existe el concepto de extensión de un archivo) por convenio. El linker ld(1) reconoce la terminación .a en un nombre de archivo y realiza la búsqueda de módulos en el mismo como si se tratara de una biblioteca estática, seleccionando y añadiendo al programa aquellos que resuelvan referencias aún no satisfechas.

Las bibliotecas dinámicas, por contraposición, no son archivos sino que son objetos reubicables, marcados con un código especial (que los identifica como bibliotecas compartidas). El linker ld(1), como hemos dicho, no añade al código del programa los módulos, sino que selecciona como resueltos los identificadores aportados por la biblioteca, añade aquellos introducidos por ésta, y continúa sin añadir el código de la misma al programa, pero como si éste hubiera sido añadido. El linker ld(1) reconoce una biblioteca compartida por tener la terminación .so (y no .so.xxx.yyy, volveremos sobre ésto mas adelante).

Y por si no le salió la práctica o no anoto nada en la clase (como yo…) aquí les dejo una página con un ejemplo.
Saludos a todos !!!
García Carrasco José Florentino.

2 comentarios:

Aníbal Del Ángel Fernández dijo...

Muchas gracias José, tu resumen me parece muy útil porque contempla concretamente lo que son las bibliotecas y sus tipos. Gracias y saludos.

Emmanuel dijo...

muy buen articulo, me parece buena la idea de hacer un resumen de lo visto en clase, muy completo.