Investigación Bibliotecas Estáticas y Dinámicas

11

Click here to load reader

Transcript of Investigación Bibliotecas Estáticas y Dinámicas

Page 1: Investigación Bibliotecas Estáticas y Dinámicas

INSTITUTO TECNOLOGICO SUPERIOR

DE COATZACOALCOS

Trabajo:

Bibliotecas Estaticas y Dinamicas

Presenta:

Nolasco Avendaño Raúl

Asignatura:

Topicos Selectos de Programación

Catedratrico:

Ing. Israel Morales Reyes

Carrera:

ISC-3D

Coatzacoalcos, Veracruz a 7 de Octubre del 2010

Page 2: Investigación Bibliotecas Estáticas y Dinámicas

¿Que es una librería?

Se emplea el término librería para referirse a una biblioteca, por la similitud con el original inglés library. Ambos términos, biblioteca y librería, son correctos según las definiciones (biblioteca,1 librería2 ) de la RAE, aunque en términos formales, la acepción correcta es biblioteca, porque es la traducción correcta de library, mientras que el término inglés para librería es bookstore o book shop (literalmente: tienda de libros), o bien bookshelf (estantería o mueble para guardar libros, librería o librero). También es habitual referirse a ella con el término de origen anglosajón toolkit (conjunto, equipo, maletín, caja, estuche, juego (kit) de herramientas).

La palabra library tiene un significado adicional en el ámbito de la informática: Conjunto de programas estándar y subrutinas que están almacenadas y disponibles para su utilización.

Biblioteca estatica

Una biblioteca estática, también conocido como archivo, consiste en un conjunto de rutinas que se copian en una aplicación por el compilador o el enlazador, produciendo archivos con código objeto y un fichero ejecutable independiente. Este proceso, y el archivo ejecutable, se conoce como una construcción estática de la aplicación objetivo. La dirección real, las referencias para saltos y otras llamadas a rutinas se almacenan en una dirección relativa o simbólica, que no puede resolverse hasta que todo el código y las bibliotecas son asignadas a direcciones estáticas finales.

El enlazador resuelve todas las direcciones no resueltas convirtiéndolas en direcciones fijas o relocalizables (desde una base común) cargando todo el código y las bibliotecas en posiciones de memoria en tiempo de ejecución. Este proceso de enlazado puede durar incluso más tiempo que el proceso de compilación, y debe ser realizado cada vez que alguno de los módulos es recompilado. La mayoría de los lenguajes compilados tienen biblioteca estándar (por ejemplo, la biblioteca estándar de C), pero los programadores también pueden crear sus propias bibliotecas personalizadas. Los compiladores comerciales proporcionan tanto las bibliotecas estándar como las personalizadas.

Page 3: Investigación Bibliotecas Estáticas y Dinámicas

Ventajas e inconvenientes de las bibliotecas estáticas

Un programa compilado con librerías estáticas es más grande, ya que se hace copia de todo lo que necesita.

Un programa compilado con librerías estáticas se puede llevar a otro ordenador sin necesidad de llevarse las librerías.

Un programa compilado con librerías estáticas es, en principio, más rápido en ejecución. Cuando llama a una función de la librería, la tiene en su código y no tiene que ir a leer el fichero de la librería dinámica para encontrar la función y ejecutarla.

Si cambiamos una librería estática, a los ejecutables no les afecta. Si cambiamos una dinámica, los ejecutables se ven afectados. Esto es una ventaja si hemos cambiado la librería para corregir un error (se corrige automáticamente en todos los ejecutables), pero es un inconveniente si tocar eso nos hace cambiar los ejecutables (por ejemplo, hemos añadido un parámetro más a una función de la librería, los ejecutables ya hechos dejan de funcionar).

Page 4: Investigación Bibliotecas Estáticas y Dinámicas

Ejemplo de los pasos para generar una biblioteca estática que incluya los objetos

de los ficheros ctest1.c y ctest2.c, así como la utilización de la biblioteca en el programa prog.c.

1. Compilar para obtener los objetos

gcc -Wall -c ctest1.c ctest2.c

2. Reunir los objetos compilados en una biblioteca con la utilidad ar

ar -cvq libctest.a ctest1.o ctest2.o

3. Comprobar el contenido de la biblioteca

ar -t libctest.a

4. Compilar la aplicación y enlazarla con la biblioteca

gcc -static -o prog prog.c -L. -lctest

5. Ejecutar la aplicación

./prog

Page 5: Investigación Bibliotecas Estáticas y Dinámicas

Bibliotecas dinámicas

Una librería de enlace dinámico, en adelante DLL (Dynamic Link Library), es un archivo que contiene funciones y/o recursos (mapas de bits, definiciones de fuentes, etc.) que podrían ser llamados desde cualquier aplicación Windows.

De hecho, se puede considerar que Windows está construído sobre una gran cantidad de DLL's. La mayoria de librerías de enlace dinámico se guardan en archivos que tienen extensión DLL, pero también pueden ser guardados en archivos con extensiones EXE (ejecutable), DRV (controlador de dispositivo) y FON (fuente de Windows).

La diferencia entre las librerías de enlace dinámico con extensión DLL y el resto, es que las primeras se cargan porque el programa que las ha de utilizar lo pide a Windows y las demás, en cambio, se cargan porque están referenciadas en archivos de inicialización de Windows. Estas referencias pueden ser creadas por el propio Windows o por el programa de instalación de alguna aplicación.

Hay dos formas diferentes de usar este tipo de bibliotecas.

a) Enlazando dinámicamente en tiempo de carga. La biblioteca debe estar disponible durante la fase de compilación/enlazado. Los objetos compartidos no se incluyen en el ejecutable.

b) Cargando y descargando dinámicamente la biblioteca durante la ejecución, usando para ello las funciones de sistema del cargador de enlace dinámico.

Las bibliotecas dinámicas provocan una sobrecarga en el sistema debido a varios elementos:

La carga del programa se realiza en varios pasos, uno para el programa principal, m ;s uno por cada biblioteca dinámica que use dicho programa.

Si la biblioteca dinámica es muy utilizada, su carga deja de ser un inconveniente y pasa a ser una ventaja

Las bibliotecas dinámicas deben contener código reubicable, ya que la posición de carga dentro del espacio de direcciones virtuales del proceso no se sabrá hasta el momento de la carga

Page 6: Investigación Bibliotecas Estáticas y Dinámicas

Enlace dinámico significa que las subrutinas de una biblioteca son cargadas en un programa en tiempo de ejecución, en lugar de ser enlazadas en tiempo de compilación, y se mantienen como archivos independientes separados del fichero ejecutable del programa principal. El enlazador realiza una mínima cantidad de trabajo en tiempo de compilación, registra que rutinas de la biblioteca necesita el programa y el índice de nombres o números de las rutinas en la biblioteca. La mayor parte de la labor de enlazado se realiza en el momento en que la aplicación se carga (tiempo de carga o loadtime) o durante la ejecución (tiempo de ejecución o runtime). El necesario código enlazado, llamado por el cargador, es de hecho parte del sistema operativo subyacente. En el momento adecuado el cargador localiza las bibliotecas en el disco y añade los datos relevantes de éstas en el espacio de memoria del proceso.

Algunos sistemas operativos sólo pueden enlazar una biblioteca en tiempo de carga, antes de que el proceso comience su ejecución, otros son capaces de esperar hasta después de que el proceso haya empezado a ejecutarse y enlazar la biblioteca sólo cuando efectivamente se hace referencia a ella (es decir, en tiempo de ejecución). Esto último se denomina "retraso de carga". En cualquier caso, esa biblioteca es una biblioteca enlazada dinámicamente.

El enlace dinámico, por su naturaleza, tiene tan sólo las limitaciones establecidas por las licencias de software.

Los plugins son un uso común de las bibliotecas enlazadas dinámicamente, que son especialmente útiles cuando unas bibliotecas pueden ser sustituidas por otras con una interfaz similar, pero diferente funcionalidad. Se puede decir que un software tiene una "arquitectura de plugin" si utiliza bibliotecas con una funcionalidad básica con la intención de que puedan ser sustituidas. Sin embargo, el uso de las bibliotecas enlazadas dinámicamente en la arquitectura de una aplicación no significa necesariamente que puedan ser sustituidas.

El enlace dinámico se desarrolló originalmente en los sistemas operativos Multics a partir de 1964. Se trataba de una característica del MTS (Michigan Terminal System), construido a finales de los 60.6 En Microsoft Windows, las bibliotecas enlazadas dinámicamente se denominan DLL (dynamic-link library).

Page 7: Investigación Bibliotecas Estáticas y Dinámicas

Ventajas e inconvenientes del uso de DLL’s

Ventajas InconvenientesUna función definida dentro de una DLL está disponible para cualquier aplicación Windows.

Tienen que estar presentes en la carpeta del sistema antes de ser utilizadas

Se reduce el tamaño de las aplicaciones que utilizan la DLL por la reutilización de su código.

El tiempo de acceso a la DLL por parte de la aplicación que la usa es más lento.

Mejora en el tiempo de compilación y/o carga de la aplicación (debido al menor tamaño del código)Ahorro de espacio en disco.

Las DLL's son independientes de la aplicación.

Ejemplo de los pasos para generar una biblioteca dinámica que incluya los objetos de los ficheros ctest1.c y ctest2.c, y utilización de la biblioteca en el programa prog.c para enlace dinámico en tiempo de carga.

1. Compilar para obtener los objetos

gcc -Wall -fPIC -c ctest1.c ctest2.c

(-fPIC indica al compilador que debe generar código independiente de la posición, necesario para que pueda ser compartido en ejecución por más de una aplicación)

2. Reunir los objetos compilados en una biblioteca con la utilidad gcc

gcc -shared -Wl,-soname,libctest.so.1 -o libctest.so.1.0 *.o

(La opción -shared produce un objeto compartido que puede ser enlazado) (La opción -Wl pasa opciones al enlazador. En este caso le dice que se refiera internamente a la biblioteca como libctest.so.1)

3. Crear enlaces para referenciar la biblioteca con nombres estándar

ln -sf libctest.so.1.0 libctest.so

ln -sf libctest.so.1.0 libctest.so.1

Page 8: Investigación Bibliotecas Estáticas y Dinámicas

4. Compilar la aplicación y enlazarla con la biblioteca dinámica

gcc -o prog prog.c -L. -lctest

5. Comprobar las dependencias de bibliotecas dinámicas que tiene el ejecutable

ldd prog

6. Para poder hallar las bibliotecas dinámicas en ejecución hay que indicarle al sistema en qué directorio están almacenadas. Para esto se usa la variable LD_LIBRARY_PATH

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

ldd prog

7. Ejecutar la aplicación

./prog

Estructura de una DLL de 32 bits

Una DLL se puede dividir, básicamente, en tres partes:

• Archivo de cabecera: Contendrá todas las declaraciones y/o definiciones (de variables, funciones, etc.) que use la DLL.

• Punto de entrada y salida a la DLL: Es la función principal de la DLL, y es la que se encarga de cargar la DLL (cuando se vaya a usar) y descargarla de la memoria (cuando se deje de usar). Dicha función se llama DllEntryPoint.

• Funciones que contiene la DLL: Son las funciones que contiene la DLL y que fueron declaradas por el programador de la misma.