D'accord, j'essaie de travailler avec cela depuis le plus longtemps, 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 compiler, et je ne peux vraiment pas comprendre pourquoi ...
Voici mes fichiers sources. Premier hello_world.c:
#include <stdio.h>
#include "hello_world.h"
int hello_world(void) {
printf("Hello, Stack Overflow!\n");
return 0;
}
Alors bonjour_world.h, simple:
int hello_world(void);
Et puis enfin main.c:
#include "hello_world.h"
int main() {
hello_world();
return 0;
}
Quand je le mets dans GCC, voici ce que j'obtiens:
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
En outre, utilisez toujours des protecteurs 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 ne liez pas contre hello_world.c.
Un moyen simple de le faire est d'exécuter cette commande de compilation:
cc -o main main.c hello_world.c
Les projets plus compliqués utilisent souvent des scripts de construction ou créent des fichiers qui séparent les commandes de compilation et de liaison, mais la commande ci-dessus (combinant les deux étapes) devrait convenir aux petits projets.
Vous devez lier le fichier objet complété à partir 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
Oui, 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 grands projets, il vaut mieux utiliser des fichiers Make ou certains scripts de compilation.