Cuando se compila un programa C, el compilador genera código objeto. Después de generar el código objeto, el compilador también invoca al enlazador. Una de las tareas principales de linker es hacer Código de funciones de biblioteca (por ejemplo printf (), scanf (), sqrt (),..etc) Disponible para su programa. Un enlazador puede realizar esta tarea de dos maneras, copiando el código de la función de biblioteca a su código objeto, o haciendo algunos arreglos para que el código completo de las funciones de biblioteca no se copie, sino que esté disponible en tiempo de ejecución.,
el enlace estático y las bibliotecas estáticas es el resultado de que el enlazador copie todas las funciones de biblioteca utilizadas en el archivo ejecutable. La vinculación estática crea archivos binarios más grandes y necesita más espacio en el disco y la memoria principal. Ejemplos de bibliotecas estáticas (bibliotecas que están vinculadas estáticamente) son, .a archivos en Linux y .archivos lib en Windows.
pasos para crear una biblioteca estática vamos a crear y utilizar una biblioteca estática en UNIX o UNIX como OS.
1. Cree un archivo C que contenga funciones en su biblioteca.,div>
#include <stdio.h>
void
fun(
void
)
{
printf
(
"fun() called from a static library"
);
}
We have created only one file for simplicity., También podemos crear varios archivos en la biblioteca.
2. Crear un archivo de encabezado de la biblioteca
void
fun(
void
);
3. Compilar archivos de biblioteca.
gcc -c lib_mylib.c -o lib_mylib.o
4. Crear biblioteca estática., Este paso consiste en agrupar varios archivos objeto en una biblioteca estática (consulte ar para obtener más información). La salida de este paso es static library.
ar rcs lib_mylib.a lib_mylib.o
5. Ahora nuestra biblioteca estática está lista para usar. En este punto podríamos simplemente copiar lib_mylib.a otro lugar para usarlo. Para propósitos de demostración, mantengamos la biblioteca en el directorio actual.
vamos a crear un programa de controlador que utiliza la biblioteca estática creada anteriormente.
1., Crear un archivo C con la función principal
#include "lib_mylib.h"
void
main()
{
fun();
}
2., Compile el programa del controlador.
gcc -c driver.c -o driver.o
3. Enlace el programa de controlador compilado a la biblioteca estática. Tenga en cuenta que-L. se usa para indicar que la biblioteca estática está en la carpeta actual (vea esto para detalles de las opciones-L y-l).
gcc -o driver driver.o -L. -l_mylib
4. Ejecute el programa del controlador
./driver fun() called from a static library
a continuación se presentan algunos puntos importantes sobre las bibliotecas estáticas.
1. Para una biblioteca estática, el código real se extrae de la biblioteca por el enlazador y se utiliza para construir el ejecutable final en el punto de compilar/compilar su aplicación.,
2. Cada proceso obtiene su propia copia del código y los datos. Cuando, como en el caso de las bibliotecas dinámicas, solo se comparte código, los datos son específicos de cada proceso. Para las bibliotecas estáticas, las huellas de memoria son más grandes. Por ejemplo, si todas las herramientas del sistema de ventanas estuvieran enlazadas estáticamente, se desperdiciarían varias decenas de megabytes de RAM para un usuario típico, y el Usuario se vería ralentizado por una gran cantidad de paginación.
3. Dado que el código de la biblioteca está conectado en tiempo de compilación, el ejecutable final no tiene dependencias en la biblioteca en tiempo de ejecución., no hay costos adicionales de carga en tiempo de ejecución, significa que no necesita llevar una copia de la biblioteca que se está utilizando y tiene todo bajo su control y no hay dependencia.
4. En las bibliotecas estáticas, una vez que todo está incluido en su aplicación, no tiene que preocuparse de que el cliente tenga la biblioteca correcta (y la versión) disponible en su sistema.
5. Un inconveniente de las bibliotecas estáticas es, para cualquier cambio (up-gradation) en las bibliotecas estáticas, usted tiene que recompilar el programa principal cada vez.
6., Una gran ventaja de las bibliotecas estáticas que se prefieren incluso ahora «es la velocidad». No habrá consultas dinámicas de símbolos en bibliotecas estáticas. Muchos software de línea de producción utilizan bibliotecas estáticas incluso hoy en día.
enlace Dinámico y bibliotecas dinámicas el enlace Dinámico no requiere que se copie el código, se realiza simplemente colocando el nombre de la biblioteca en el archivo binario. El enlace real ocurre cuando se ejecuta el programa, cuando tanto el archivo binario como la biblioteca están en memoria. Ejemplos de bibliotecas dinámicas (bibliotecas que están vinculadas en tiempo de ejecución) son,. so en Linux y .dll en Windows.,
pronto cubriremos más puntos sobre bibliotecas dinámicas y pasos para crearlas.
Este artículo es compilado por Abhijit Saha y revisado por el equipo de GeeksforGeeks. Por favor, escriba comentarios si encuentra algo incorrecto, o si desea compartir más información sobre el tema discutido anteriormente.
Attention reader! No dejes de aprender ahora. Obtenga todos los conceptos importantes de CS Theory para entrevistas SDE con el curso de CS Theory a un precio amigable para los estudiantes y prepárese para la industria.