Está en la página 1de 7

INTRODUCCIÓN.

Al tratar de la construcción de un programa señalamos que en ocasiones no se desea construir un


ejecutable, al menos no en el sentido tradicional del término, sino una librería, y que estas librerías
son trozos de código que contienen alguna funcionalidad pre-construida que puede ser utilizada
por un ejecutable. Por supuesto, las librerías contienen en su interior variables y funciones. Si
como suponemos son librerías C++, lo más probable es que estas variables y funciones estén
encapsuladas en forma de clases. Observe que la idea central de librería es precisamente la de ser
un módulo de software pre construido para cuya utilización no es necesario conocer los detalles
íntimos de su funcionamiento, sino su interfaz. Es decir, que respuestas nos puede dar y cómo hay
que preguntar -a la librería- para obtenerlas.

En general, el término librería se utiliza para referirse a un conjunto de módulos objeto .obj / .o
(resultados de compilación) agrupados en un solo fichero que suele tener las
extensiones .lib, .bpl, .a, .dll, etc. Estos ficheros permiten tratar las colecciones de módulos como
una sola unidad, y representan una forma muy conveniente para el manejo y desarrollo de
aplicaciones grandes, además de ser un concepto muy fértil para la industria del software, ya que
permiten la existencia de las librerías de los propios compiladores y de un mercado de utilidades y
componentes adicionales. Son las denominadas librerías 3pp (de terceras partes), en referencia a
que no son incluidas de forma estándar con los compiladores ni creadas por el programador de la
aplicación.

LIBRERÍAS en C/C++.

En lo que respecta al lenguaje C++, existen dos tipos fundamentales de librerías: estáticas y
dinámicas, que aunque comparten el mismo nombre genérico "librería", utilizan mecanismos
distintos para proporcionar su funcionalidad al ejecutable.

En ambos casos es costumbre, que junto a las librerías propiamente dichas (ficheros .lib, .a, .dll
etc), se incluya un fichero .h denominado "de cabecera", porque es tradición utilizar las primeras
líneas del programa para poner las directivas #include que los incluirán en el fuente durante la fase
de pre proceso. Este fichero contiene las declaraciones de las entidades contenidas en la librería,
así como las macros y constantes predefinidas utilizadas en ella, de forma que el programador solo
tiene que incluir el correspondiente fichero .h en su aplicación para poder utilizar los recursos de la
librería en cuestión (recuerde que en C/C++ es imprescindible incluir la declaración de cualquier
función o clase antes de su utilización). Este sistema tiene la ventaja adicional de que proporciona
al usuario la información mínima para su uso. Es decir, la "interfaz" de las funciones o clases que
utilizará. En el caso de funciones esto se concreta en el prototipo; en el caso de clases, en la
especificación de sus métodos y propiedades públicas.

 Librerías estáticas.

Denominadas también librerías-objeto, son colecciones de ficheros objeto (compilados) agrupados


en un solo fichero de extensión .lib, .a, etc. junto con uno o varios ficheros de cabecera
(generalmente .h).Durante la construcción de la aplicación, el preprocesador incluye en los fuentes

1
los ficheros de cabecera. Posteriormente, durante la fase de enlazado, el linker incluye en el
ejecutable los módulos correspondientes a las funciones y clases de librería que hayan sido
utilizadas en el programa, de forma que el conjunto entra a formar parte del ejecutable. De ahí su
nombre: Librerías enlazadas estáticamente.

Dejando aparte consideraciones de comodidad y rapidez, el resultado de utilizar una de tales


librerías no se diferencia en nada al que puede obtenerse escribiendo en al fuente las funciones o
clases correspondientes y compilándolas como un módulo más de nuestra aplicación.

 Diccionario

Junto con los módulos .obj que las componen, las librerías estáticas incluyen una especie de índice
o diccionario con información sobre su contenido. Este índice contiene los nombres de los recursos
públicos de los distintos módulos (que pueden ser accedidos desde el exterior) y su dirección.
Estos nombres deben ser distintos para evitar ambigüedades durante el enlazado, y sirven para
incrementar la velocidad de enlazado cuando el "Linker" debe incluir alguno en un ejecutable.

 Librerías dinámicas

Otra forma de añadir funcionalidad a un ejecutable son las denominadas librerías de enlazado
dinámico, generalmente conocidas como DLLs, acrónimo de su nombre en inglés ("Dynamic
Linked Library"). Estas librerías se utilizan mucho en la programación para el SO Windows. Este
Sistema contiene un gran número de tales librerías de terminación .DLL, aunque en realidad
pueden tener cualquier otra terminación .EXE, .FON, .BPI, .DRV etc. Cualquiera que sea su
terminación, de forma genérica nos referiremos a ellas como DLLs, nombre por el que son más
conocidas.

 Diferencias: librería Estática "versus" Dinámica

Las diferencias más relevantes de las librerías dinámicas respecto a las estáticas son
fundamentalmente dos:

Las librerías estáticas quedan incluidas en el ejecutable, mientras las dinámicas son ficheros
externos, con lo que el tamaño de la aplicación (nuestro ejecutable) es mayor en el primer caso
que en el segundo. Esto puede ser de capital importancia en aplicaciones muy grandes, ya que el
ejecutable debe ser cargado en memoria de una sola vez.

Las librerías dinámicas son ficheros independientes que pueden ser invocados desde cualquier
ejecutable, de modo que su funcionalidad puede ser compartida por varios ejecutables. Esto
significa que solo se necesita una copia de cada fichero de librería (DLL) en el Sistema. Esta
característica constituye la razón principal de su utilización, y es también origen de algunos
inconvenientes, principalmente en sistemas como Windows en los que existen centenares de ellas.
Como consecuencia de las diferencias citadas se derivan otras. Por ejemplo:

Si se realizan modificaciones en los módulos de una librería estática, es necesario recompilar todos
los ejecutables que la utilizan, mientras que esto no es necesario en el caso de una librería
dinámica, siempre que su interfaz se mantenga.

2
Como consecuencia de lo anterior, generalmente es más difícil la depuración y mantenimiento de
aplicaciones que utilizan librerías dinámicas que las estáticas, ya que en el primer caso, es
necesario controlar qué versiones de los ejecutables (.EXE) son compatibles con qué versiones de
las DLLs y de estas entre sí, de forma que el usuario no utilice un versiones incompatibles de los
ficheros que componen la aplicación.

Durante la ejecución de un ejecutable, las librerías estáticas que hubiesen intervenido en su


construcción no necesitan estar presentes, en cambio las dinámicas deben estar en el mismo
directorio o en el camino de búsqueda "Path".

Las librerías estáticas solo se utilizan en la fase de construcción del ejecutable. Las dinámicas se
utilizan durante la ejecución.

Los ejecutables que utilizan librería estáticas solo incorporan los módulos de aquellas que
necesitan para resolver sus símbolos externos. Por contra, las librerías dinámicas deben ser
cargadas en su totalidad aunque no solo se utilice una parte de su funcionalidad (no son divisibles).

Las librerías estáticas, que entran a formar parte indivisible del ejecutable, son cargadas con el
proceso de carga de este. Las librerías dinámicas no necesariamente tienen que cargarse con la
carga inicial (aunque pueden serlo). De hecho, una librería dinámica puede ser cargada bajo
demanda en el momento en que se necesita su funcionalidad, e incluso puede ser descargada
cuando no resulta necesaria.

El mecanismo de enlazado estático depende del compilador. El de enlazado dinámico depende del
SO, de forma que manteniendo ciertas precauciones, las DLLs construidas con un lenguaje y un
compilador pueden ser utilizadas por cualquier aplicación.

 Utilizar Librerías

Desde la óptica del programador C++, el manejo de librerías comprende dos aspectos totalmente
diferenciados: su utilización y quizás la construcción de alguna de ellas si nuestras aplicaciones
son medianamente grandes. En cuanto al primer punto, es seguro que cualquier aplicación por
pequeña que sea, utilice algunas de la Librería Estándar. Por ejemplo, cada vez que en su código
aparece una sentencia del tipo

cout << "Hola mundo" << endl;

está utilizando una librería estática, y cada vez que en la programación de una aplicación Windows
utiliza un mensaje del tipo

MessageBox(NULL, "Hola mundo!", "Mi primer programa", MB_OK);

está usando una librería dinámica. En cuanto a su construcción, si se dedica a esto de programar
en C++, antes o después pondrá manos a la obra. Por cierto: existen empresas de software cuya
principal actividad es precisamente fabricar y vender librerías (ya hemos indicado que el mercado
de las 3pp es todo un "mundillo" dentro de la informática).

Cualquiera que sea el caso, tanto la utilización como la construcción, son diferentes según se trate
de librerías estáticas o dinámicas. En las páginas que siguen se describen en detalle ambas
situaciones. Empezaremos por una descripción general de su funcionamiento, para continuar con
la descripción de los pasos necesarios para construirlas. A continuación exponemos los detalles

3
de su utilización, incluyendo un ejemplo de construcción de un ejecutable que utiliza los recursos
de una librería.

 Librería clásica

C++ incluye la totalidad de funciones de la primitiva librería estándar C. A esta librería, mantenida
por compatibilidad, la denominamos Librería clásica. En la página adjunta se muestra una relación
de estas funciones. Tradicionalmente los ficheros de cabecera C terminan en .h, y en la librería C+
+ mantenían los mismos nombres:

<assert.h> <ctype.h> <errno.h> <float.h> <limits.h>

<locale.h> <math.h> <setjmp.h> <signal.h> <stdarg.h>

<stddef.h> <stdio.h> <stdlib.h> <string.h> <time.h>

Resumen de librerías en C

 assert.h Contiene una macro para el diagnóstico dentro de los programas.


 ctype.h Contiene varias funciones para comprobación de tipos y transformación de
caracteres.
 errno.h Contiene varias macros usadas para informar de errores.
 limits.h Contienen varias macros que definen constantes para el tamaño de tipo enteros.
 float.h Contienen varias macros que definen constantes para el tamaño de tipo flotante.
 locale.h Contienen varias macros, funciones y tipos para unidades locales, como unidad
monetaria, tiempo, dígitos, etc.
 math.h Contiene una macro y varias funciones matemáticas.
 setjmp.h Contienen declaraciones que proporcionan una forma de evitar la secuencia
normal de llamada y regreso de funciones.
 signal.h Contiene un tipo, dos funciones y varias macros para manejar condiciones
excepcionales que aparecen durante la ejecución, tal como una señal de interrupción de
una fuente externa o un error en la ejecución.
 stdarg.h Contiene un tipo y tres macros que proporcionan recursos para recorrer una lista
de argumentos de función de tamaño y tipo desconocido.
 stddef.h Contiene varios tipos y macros que también están definidas en otras librerías,
como size_t.
 stdio.h Contiene tipos, macros y funciones para la realización de tareas de E/S.
 stdlib.h Contiene tipos, macros y funciones para la conversión numérica, generación de
números aleatorios, búsquedas y ordenación, gestión de memoria y tareas similares.
 string.h Contiene tipos, macros y funciones para la manipulación de cadenas de
caracteres.
 time.h Contiene tipos, macros y funciones para la la manipulación de información sobre
fechas y horas.

4
Funciones de librerías.

 #include <stdio.h>

clearerr fclose feof ferror fflush fgetc fgetpos


fgets fopen formato fprintf fputc fputs fread
freopen fscanf fseek fsetpos ftell fwrite getc
getchar gets perror printf putc putchar puts
remove rename rewind scanf setbuf setybuf sprintf
sscanf tmpfile tmpnam ungetc vfprintf vprintf vsprintf

 #include <stdlib.h>

abort abs atexit atof atoi atol bsearch


calloc div exit free getenv labs ldiv
malloc mblen mbstowcs mbtowc qsort rand Realloc
srand strtod strtol strtoul system wctomb

 #include <string.h>

memchr memcmp memcpy memmove memset strcat strchr


strcmp strcoll strcpy strcspn strerror strlen strmcat
strmcmp strmcpy strpbrk strrchr strspn strstr strtok
strxfrm

 #include <ctype.h>

tolower toupper

 #include <locale.h>

localeconv setlocale

 #include <math.h>

Acos Asin atan atan2 ceil cos cosh


Exp Fabs floor fmod frexp ldexp log
log10 modf pow sin sinh sqrt tan
tanh

 #include <setjmp.h>

longjmp setjmp

5
 #include <signal.h>

raise signal

 #include <time.h>

asctime clock ctime difftime Gmtime localtime mktime


strftime time

Librería en borland C

 #include <conio.h>

cgets clreol clrscr cprintf


cputs cscanf delline getch
getche getpass gettext gettextinfo
gotoxy highvideo inport insline
kbhit lowvideo movetext normvideo
setcursortyp
outport putch puttext
e
textbackgroun
textattr textcolor textmode
d
ungetch wherex wherey window

 #include <graphics.h>

arc bar bar3d circle


clearviewpo
cleardevice closegraph detectgraph
rt
drawpoly ellipse fillellipse fillpoly
getarccoord getaspectra
floodfill getbkcolor
s tio
getdefaultp getdriverna
getcolor getfillpattern
alett me
getfillsetting getgraphmo getlinesettin
getimage
s de gs
getmaxmod
getmaxcolor getmaxx getmaxy
e
getmodena getmoderan getpalettesi
getpalette
me ge ze
gettextsettin getviewsetti
getpixel getx
gs ngs
graphdefaul grapherror graphfreem
gety
ts msg em
graphgetme
graphresult imagesize initgraph
m
installuserdri installuserfo
line linerel
ve nt
lineto moverel moveto outtext
outtextxy pieslice putimage putpixel
rectangle registerbgid registerbgif restorecrtm

6
rive ont ode
setactivepa setaspectrat
sector setallpalette
ge io
setbkcolor setcolor setfillpattern setfillstyle
setgraphbuf setgraphmo
setlinestyle setpalette
size de
setrgbpalett settextjustif setuserchar
settextstyle
e y size
setvisualpa setwritemod
setviewport textheight
ge e
textwidth

Otras librerías que no tienen funciones asociadas. Pero tienen macros constantes y/o estructuras.

 #include <assert.h>
 #include <errno.h>
 #include <float.h>
 #include <limits.h>
 #include <stdarg.h>
 #include <stddef.h>

Bibliografía.

http://www.zator.com/Cpp/E5_5.html

http://programandoenc.over-blog.es/article-29441001.html

http://c.conclase.net/

También podría gustarte