Compilar varios archivos
Compile un programa con varios archivos
Compilar varios archivos 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.
Del código fuente al programa
Convertir código fuente C dividido en varios archivos en un ejecutable ocurre en dos etapas: compilación y enlace.
Cada archivo .c se compila por separado en un archivo objeto. Después, el enlazador combina todos los archivos objeto, resolviendo las referencias entre ellos, para crear un único programa ejecutable.
La compilación con un solo comando
El enfoque más sencillo pasa todos los archivos de código fuente a gcc a la vez. El compilador compila cada uno y después los enlaza automáticamente.
La opción -o asigna el nombre al programa de salida. Enumere todos los archivos .c; los encabezados se incorporan mediante #include y no se enumeran aquí.
gcc main.c math_utils.c -o appCompilación independiente
En proyectos grandes, compile cada archivo en un archivo objeto con -c. Esto produce un archivo .o y no realiza el enlace.
Compilar por separado significa que, si cambia un solo archivo de código fuente, solo tendrá que recompilar ese archivo, lo que acelera las compilaciones grandes.
gcc -c main.c /* produces main.o */
gcc -c math_utils.c /* produces math_utils.o */La etapa de enlace
Cuando tenga los archivos objeto, enlácelos para crear un ejecutable. Aquí gcc actúa como enlazador: une los objetos y resuelve los símbolos entre archivos.
Esta vez no se utiliza -c, porque queremos un programa final, no otro archivo objeto.
gcc main.o math_utils.o -o appQué hace el enlazador
El enlazador asocia cada uso de un símbolo con su definición.
Cuando main.o llama a add, el enlazador encuentra la definición de add en math_utils.o y los conecta. También incorpora el código de la biblioteca estándar que necesita su programa.
Errores de referencia no definida
Si olvida un archivo objeto al enlazar, el enlazador no puede encontrar una definición e informa de una referencia no definida.
Este es un error en tiempo de enlace, no un error de compilación: cada archivo se compiló correctamente, pero faltaba una definición necesaria en el comando final.
gcc main.o -o app
/* undefined reference to `add' */
/* fix: include math_utils.o */Opciones de advertencia útiles
Compile siempre con las advertencias activadas. -Wall y -Wextra permiten detectar posibles errores desde el principio.
Al añadir -std=c11, selecciona un estándar del lenguaje para que el comportamiento sea predecible entre compiladores. Estas opciones funcionan tanto si compila en un solo paso como si lo hace por separado.
gcc -Wall -Wextra -std=c11 -c main.c
gcc -Wall -Wextra -std=c11 -c math_utils.c
gcc main.o math_utils.o -o appRutas de inclusión
Cuando los encabezados se encuentran en otro directorio, indique al compilador dónde buscarlos mediante -I.
Por ejemplo, -Iinclude añade una carpeta include/ a la ruta de búsqueda, por lo que #include "math_utils.h" se resuelve incluso desde otra carpeta.
gcc -Iinclude -c src/main.c -o build/main.oPor qué es importante recompilar
La compilación independiente resulta especialmente útil cuando solo cambia un archivo. Recompile únicamente el objeto de ese archivo y vuelva a enlazar.
Sin embargo, si edita un encabezado, debe recompilar todos los archivos de código fuente que lo incluyan, porque el texto del encabezado forma parte de cada uno de ellos.
/* edited math_utils.c only */
gcc -c math_utils.c
gcc main.o math_utils.o -o appAutomatización con make
Escribir los comandos manualmente resulta tedioso. Un Makefile registra las reglas y vuelve a compilar solo lo que haya cambiado.
Este ejemplo mínimo enlaza dos objetos en app; make realiza un seguimiento de las marcas de tiempo de los archivos para decidir qué debe recompilar.
app: main.o math_utils.o
gcc main.o math_utils.o -o app
main.o: main.c math_utils.h
gcc -c main.cResumen de una compilación completa
Este es el flujo completo para un proyecto pequeño, desde los objetos hasta un programa terminado con las advertencias activadas.
Compile cada archivo de código fuente y después enlace los objetos. Ejecute el resultado para confirmar que funciona de principio a fin.
gcc -Wall -c main.c
gcc -Wall -c math_utils.c
gcc main.o math_utils.o -o app
./appComprobación rápida
Compruebe su comprensión del proceso de compilación de varios archivos.
Resumen
Ha aprendido a compilar cada archivo .c en un objeto con -c y después a enlazar los objetos para crear un programa. Utilice -Wall y -I para las advertencias y las rutas de inclusión.
Las referencias no definidas indican que falta un objeto en tiempo de enlace. Herramientas como make automatizan la recompilación de solo lo que haya cambiado.
Preguntas frecuentes
¿La lección «Compilar varios archivos» es gratis?
Sí — el texto completo de «Compilar varios archivos» 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 «Compilar varios archivos»?
Compile un programa con varios archivos 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 «Compilar varios archivos»?
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
- Archivos de cabecera y de código fuente
- Guardas de inclusión
- extern y linkage
- Compilar varios archivos