c gcc header header-files undefined-reference

Problema del encabezado C:#include y "referencia indefinida"



gcc header (5)

Debe vincular el archivo del objeto completado desde su segundo archivo .c hello_world.c con su main.o

prueba esto

cc -c main.c cc -c hello_world.c cc *.o -o hello_world

Bien, he tratado de trabajar con esto por mucho tiempo, y parece que no puedo hacer que funcione bien. Tengo tres archivos, main.c , hello_world.c y hello_world.h . Por alguna razón, no parecen compilar muy bien, y realmente no puedo entender por qué ...

Aquí están mis archivos fuente. Primero hello_world.c:

#include <stdio.h> #include "hello_world.h" int hello_world(void) { printf("Hello, Stack Overflow!/n"); return 0; }

Entonces hello_world.h, simple:

int hello_world(void);

Y finalmente, main.c:

#include "hello_world.h" int main() { hello_world(); return 0; }

Cuando lo pongo en GCC, esto es lo que obtengo:

cc main.c -o main /tmp/ccSRLvFl.o: In function `main'': main.c:(.text+0x5): undefined reference to `hello_world'' collect2: ld returned 1 exit status make: *** [main] Error 1

¿Alguien capaz de ayudarme? Estoy realmente atrapado en esto, pero estoy 99 por ciento seguro de que es una solución realmente simple.


No está incluyendo hello_world.c en compilación.

gcc hello_world.c main.c -o main


Parece que has olvidado vincular hello_world.c. Seré gcc hello_world.c main.c -o main. Si la cantidad de archivos es menor, podemos utilizar este enfoque, pero en proyectos más grandes, es mejor utilizar archivos Make o algunos scripts de compilación.


Usted no está enlazando contra hello_world.c.

Una forma fácil de hacerlo es ejecutar este comando de compilación:

cc -o main main.c hello_world.c

Los proyectos más complicados a menudo usan scripts de construcción o crean archivos que separan los comandos de compilación y vinculación, pero el comando anterior (que combina ambos pasos) debería funcionar bien para proyectos pequeños.


gcc main.c hello_world.c -o main

Además, siempre use protectores de encabezado:

#ifndef HELLO_WORLD_H #define HELLO_WORLD_H /* header file contents go here */ #endif /* HELLO_WORLD_H */