¿Qué es la biblioteca en lenguaje informático?

1. ¿Qué son las bibliotecas?

Las bibliotecas, en el sentido más básico, son piezas compiladas de código reutilizable, es decir, código que debe usarse una y otra vez, por lo que es mejor compilarlo y almacenarlo para su uso futuro, de modo que se reduzca el tiempo de compilación general de nuestra aplicación.

En términos más técnicos, las bibliotecas son una colección de archivos de objetos (.o) que no son más que archivos binarios compilados a partir de archivos .c o .cpp. Estos archivos .o generalmente contienen las definiciones de funciones que se declararon en archivos de encabezado (.h) separados.

2. Tipos de bibliotecas.

Hay dos tipos: estático y dinámico.

Bibliotecas estáticas: las bibliotecas estáticas, como su nombre lo indica, están vinculadas a nuestro código en tiempo de compilación. No son más que una colección archivada de uno o más archivos .o, y su tiempo de enlace es solo un poco más rápido que las bibliotecas dinámicas. Pero las bibliotecas estáticas aumentan la memoria que ocupa nuestro código porque su contenido se fusiona directamente con nuestro código. En sistemas similares a Unix, las bibliotecas estáticas tienen la extensión “.a” mientras que en Windows es “.lib”

Bibliotecas dinámicas: las bibliotecas dinámicas están vinculadas a nuestro código en tiempo de ejecución, pero debemos informar al vinculador sobre la existencia y la ruta de la biblioteca en el momento de la compilación.

Las bibliotecas dinámicas no son simplemente un directorio archivado de archivos .o; en cambio, ellos mismos son archivos binarios que los humanos no pueden leer fácilmente.

Como estas bibliotecas se pueden almacenar en cualquier lugar de la memoria en tiempo de ejecución y también, dado que se comparten entre diferentes programas, el enlazador tarda un poco más en enlazarse a una biblioteca dinámica que a una estática.

Pero esta pequeña sobrecarga en el tiempo es más que compensada por la reducción en el requisito de memoria que proporcionan las bibliotecas dinámicas ya que su contenido no se fusiona con nuestro código, sino que solo se buscan las definiciones de las funciones requeridas.

Otra ventaja de las bibliotecas dinámicas es que, si la biblioteca se actualiza en algún momento, no necesitamos volver a compilar toda la aplicación. Solo tenemos que volver a compilar la biblioteca, enviarla al cliente, que luego reemplaza la versión anterior por la nueva, y simplemente vuelve a ejecutar la aplicación … el vinculador se vincula automáticamente a la versión actualizada y, por lo tanto, se ahorra una gran cantidad de tiempo de compilación .

En sistemas similares a Unix, las bibliotecas dinámicas son reconocidas por la extensión .so (objeto compartido), mientras que en Windows es la extensión .dll (biblioteca de enlace dinámico).

3. ¿Cómo se usan las bibliotecas en la compilación?

La mayoría de la gente tiene la idea errónea de que #include es un ejemplo del uso de una biblioteca. NO LO ES.

#include es una tarea de preprocesador, mientras que las bibliotecas se utilizan en el momento de la vinculación, una fase mucho más tardía en la compilación.

#include solo le indica al preprocesador que vaya a los directorios del sistema, encuentre el archivo de encabezado iostream y copie y pegue todo su contenido en el archivo del programa.

Tenga en cuenta que iostream (el archivo de encabezado) solo contiene las declaraciones de funciones como cin, cout. Sus definiciones se colocaron en un archivo .cpp, que luego se compiló y convirtió en un archivo .o, y luego se convirtió en una biblioteca junto con muchos otros archivos .o de uso común.

Por lo tanto, copiar y pegar (incluido) el código del encabezado en su archivo solo proporciona declaraciones de las funciones requeridas … las definiciones aún deberán buscarse al momento de vincular los archivos .o, que a su vez, están empaquetados dentro de las bibliotecas.

Es un montón de código relacionado que se agrupa en un solo archivo al que otro programa puede hacer referencia y usar. Por lo general, esto tiene que ver con la realización de una sola tarea compleja.