Saltar al contenido

Compilar varios archivos C con gcc

Solución:

Si tiene sus dos archivos de origen, puede compilarlos en archivos de objeto sin vincularlos, así:

gcc main.c -o main.o -c
gcc module.c -o module.o -c

donde el -c La bandera le dice al compilador que se detenga después de la fase de compilación, sin vincular. Luego, puede vincular sus dos archivos de objeto de la siguiente manera:

gcc -o myprog main.o module.o

Todo esto es un comportamiento perfectamente normal, normalmente obtendrá su archivo MAKE para compilar cosas por separado y vincularlas al final, por lo que no tendrá que volver a compilar cada archivo fuente cada vez que cambie uno de ellos.

Hablando sobre main.o “funciones de llamada en” module.o está perfectamente bien, pero un .o el archivo no es un fuente archivo, es un compilado objeto expediente. Si “pon mi código fuente en archivos con extensión .o“en realidad significaba” compilar mi código fuente en archivos con extensión .o“entonces la situación tendría mucho más sentido”.

Debe definir las funciones desde las que desea llamar modules.c dentro main.c en un archivo de encabezado, digamos modules.he incluir ese archivo de encabezado en main.c. Una vez que tenga el archivo de encabezado, compile ambos archivos juntos: gcc main.c modules.c -o output


Dos notas adicionales. Primero, modules.o es un archivo de objeto y no debe incluirse en un archivo fuente de C. En segundo lugar, no podemos hacer que un archivo C tenga una .o extensión. En realidad, debería aparecer un error al compilar un .o expediente. Algo como:

$ cat t.o
int main() {
    int x = 1;
    return 0;
}
$
$ gcc t.o
ld: warning: in t.o, file is not of required architecture
Undefined symbols:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
$

Deberías incluir .h archivos que son “encabezados”. Entonces, si su archivo principal usa módulos, debe incluir el archivo de encabezado del módulo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *