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.