Sunteți pe pagina 1din 8

m m 

m
 m 
    




 





  ! "




#$

% 
#&


 

m#'m( 



m)* 


+,-$+. $ /010


h $$23

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.



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.
- 4

Ô 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).
Ejemplo de los pasos para generar una biblioteca estática que incluya los objetos
de los ficheros 1' y /', así como la utilización de la biblioteca en el
programa %#'.

1' Compilar para obtener los objetos

#)5)1'/'

/'Reunir los objetos compilados en una biblioteca con la utilidad 

)6'1'/'

 *' Comprobar el contenido de la biblioteca

)'

7' Compilar la aplicación y enlazarla con la biblioteca

#))%#%#')')

8' Ejecutar la aplicación

'9%#
 4

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

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).


- $  :


- m
Una función definida dentro de una DLL Tienen que estar presentes en la carpeta
está disponible para cualquier aplicación del sistema antes de ser utilizadas
Windows.
Se reduce el tamaño de las aplicaciones El tiempo de acceso a la DLL por parte de
que utilizan la DLL por la reutilización de su la aplicación que la usa es más lento.
código.
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 1' y /', y utilización de la biblioteca en el programa %#' para
enlace dinámico en tiempo de carga.

1' Compilar para obtener los objetos

#)5);
m)1'/'

();
m 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)

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

#)< )5,),''1)''1'0='

(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)

*' Crear enlaces para referenciar la biblioteca con nombres estándar

);''1'0'

);''1'0''1


7'Compilar la aplicación y enlazarla con la biblioteca dinámica

#)%#%#')')

8' Comprobar las dependencias de bibliotecas dinámicas que tiene el ejecutable

 %#

>' 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

?% @m A@
BC'D @m A@
B

 %#

.' Ejecutar la aplicación

'9%#

$$ $  */

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.

S-ar putea să vă placă și