Problème d’en-tête C: #include et “référence indéfinie”

Bon, ça fait très longtemps que j’essaie de travailler avec ça, et je n’arrive tout simplement pas à le faire fonctionner correctement. J’ai trois fichiers, main.c , hello_world.c et hello_world.h . Pour une raison quelconque, ils ne semblent pas bien comstackr, et je ne peux vraiment pas comprendre pourquoi …

Voici mes fichiers sources. Premier hello_world.c:

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

Alors hello_world.h, simple:

 int hello_world(void); 

Et puis finalement main.c:

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

Quand je le mets dans GCC, voici ce que je reçois:

 cc main.c -o main
 /tmp/ccSRLvFl.o: Dans la fonction `main ':
 main.c :(. text + 0x5): référence non définie à `hello_world '
 collect2: ld a renvoyé 1 état de sortie
 make: *** [main] Erreur 1

Quelqu’un peut-il m’aider? Je suis vraiment coincé là-dessus, mais je suis sûr à 99% que c’est une solution très simple.

 gcc main.c hello_world.c -o main 

Aussi, utilisez toujours des gardes d’en-tête:

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

Vous n’incluez pas hello_world.c dans la compilation.

  gcc hello_world.c main.c -o main 

Vous devriez lier le fichier object compled de votre deuxième fichier .c hello_world.c avec votre main.o

essaye ça

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

Vous ne liez pas contre hello_world.c.

Un moyen facile de faire cela est d’exécuter cette commande de compilation:

cc -o main main.c hello_world.c

Les projets plus complexes utilisent souvent des scripts de construction ou créent des fichiers séparant les commandes de compilation et de liaison, mais la commande ci-dessus (combinant les deux étapes) devrait convenir aux petits projets.

Ya il semble que vous ayez oublié de lier hello_world.c. Je serai gcc hello_world.c main.c -o main. Si le nombre de fichiers est inférieur, nous pouvons utiliser cette approche, mais dans les projets plus importants, il est préférable d’utiliser Make ou des scripts de compilation.