Bibliotecas estáticas y compartidas
Compile y enlace bibliotecas
Bibliotecas estáticas y compartidas es una lección gratuita de C Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.
Qué es una biblioteca
Una biblioteca es un conjunto de archivos objeto compilados que puede reutilizar en varios programas sin tener que volver a compilar el código fuente cada vez.
C tiene dos tipos:
- Bibliotecas estáticas (
.a), cuyo contenido se copia en el ejecutable durante el enlazado - Bibliotecas compartidas (
.so), que se cargan durante la ejecución
Compilar archivos objeto
Ambos tipos parten de archivos objeto. Compile los archivos fuente con -c, como de costumbre.
Estos archivos .o son la materia prima que el archivador o el enlazador empaquetará.
gcc -c mathlib.c -o mathlib.o
gcc -c strlib.c -o strlib.oCrear una biblioteca estática
El archivador ar agrupa archivos objeto en un archivo .a. El nombre convencional es lib<name>.a.
Las opciones significan: r insertar, c crear si es necesario y s escribir un índice.
ar rcs libmymath.a mathlib.o strlib.oEnlazar una biblioteca estática
Enlace con -L para indicar el directorio de búsqueda y con -l para indicar el nombre de la biblioteca (omita el prefijo lib y el sufijo .a).
El código necesario se copia en el ejecutable, que después puede ejecutarse de forma independiente.
gcc main.c -L. -lmymath -o appVentajas y desventajas de las bibliotecas estáticas
El enlazado estático es sencillo y autónomo:
- El ejecutable contiene todo lo necesario; no tiene dependencias durante la ejecución
- Pero cada programa que contiene una copia produce binarios más grandes
- Corregir un error de la biblioteca requiere volver a enlazar cada programa que la utilizaba
Código independiente de la posición
Las bibliotecas compartidas pueden cargarse en cualquier dirección de memoria, por lo que su código debe ser independiente de la posición. Compile con -fPIC.
Esto genera código que utiliza direccionamiento relativo en lugar de direcciones fijas.
gcc -fPIC -c mathlib.c -o mathlib.o
gcc -fPIC -c strlib.c -o strlib.oCrear una biblioteca compartida
Compile el archivo .so con -shared. La convención es lib<name>.so.
A diferencia de un archivo estático, este es un objeto enlazado real que el cargador puede mapear durante la ejecución.
gcc -shared mathlib.o strlib.o -o libmymath.soEnlazar una biblioteca compartida
El enlazado es idéntico al caso estático. La diferencia es que el código no se copia; solo se registra una referencia.
El ejecutable sigue siendo pequeño, pero ahora depende de encontrar libmymath.so durante la ejecución.
gcc main.c -L. -lmymath -o appEncontrar la biblioteca durante la ejecución
Al iniciar, el cargador dinámico busca el archivo .so en las rutas estándar. Una biblioteca del directorio actual no se encuentra en esa lista.
Para hacer pruebas, indique al cargador dónde encontrarla con LD_LIBRARY_PATH (Linux).
LD_LIBRARY_PATH=. ./appVentajas y desventajas de las bibliotecas compartidas
Las bibliotecas compartidas intercambian simplicidad por flexibilidad:
- Muchos programas comparten una sola copia en memoria, lo que ahorra RAM y espacio en disco
- Una corrección de errores en el archivo
.sobeneficia a todos los programas sin volver a enlazarlos - Pero el programa no se inicia si falta el archivo
.soo es incompatible
Este último riesgo es el clásico «infierno de dependencias».
Inspeccionar dependencias
Dos herramientas le ayudan a ver con qué enlaza un binario:
ldd appmuestra las bibliotecas compartidas que el cargador necesitará durante la ejecuciónnm libmymath.amuestra los símbolos (funciones) que contiene una biblioteca
Si ldd muestra «not found», el cargador no puede localizar ese archivo .so en su ruta de búsqueda.
ldd app
nm libmymath.aComprobación rápida
Relacione la opción con su objetivo.
Resumen
Ya puede compilar y enlazar ambos tipos de bibliotecas:
- Estáticas:
ar rcs libX.a *.o; el código se copia en el binario, que es autónomo pero más grande - Compartidas: compile con
-fPICy cree la biblioteca con-shared; el código se carga durante la ejecución - Enlace ambos tipos con
-Ly-l; las bibliotecas compartidas necesitan una ruta de búsqueda durante la ejecución, comoLD_LIBRARY_PATH
Ya dispone de toda la cadena de herramientas, desde el preprocesador hasta la compilación.
Preguntas frecuentes
¿La lección «Bibliotecas estáticas y compartidas» es gratis?
Sí — el texto completo de «Bibliotecas estáticas y compartidas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Bibliotecas estáticas y compartidas»?
Compile y enlace bibliotecas Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C Academy?
No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Bibliotecas estáticas y compartidas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C Academy?
Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Compilación condicional
- Proyectos con varios archivos
- Makefiles
- Bibliotecas estáticas y compartidas