Compilation de plusieurs fichiers C avec gcc
J'ai deux fichiers, main.o
et modules.o
et je suis en train de compiler, de sorte que main.o
pouvez appeler des fonctions dans modules.o
. J'ai été explicitement dit de ne pas essayer #include module.o
. Je ne sais vraiment pas ce que je devrais faire à la place. J'ai essayé différentes versions de gcc
(comme gcc -x c driver main.o modules.o
), mais rien de ce que je acquérir des œuvres: le compilateur renvoie en permanence
error: called object is not a function
La .o
fichiers sont mes fichiers de code source (j'ai été chargé de mettre mon code source dans des fichiers avec l'extension .o
.) Que dois-je faire pour compiler ce?
source d'informationauteur vaindil
Vous devez vous connecter pour publier un commentaire.
Vous devez définir les fonctions que vous voulez l'appeler à partir de modules.c dans main.c dans un fichier d'en-tête, disons, les modules.h, et d'inclure ce fichier d'en-tête dans la main.c. Une fois que vous avez le fichier d'en-tête, veuillez compiler les deux fichiers ensemble: "gcc main.c modules.c -o output"
Deux remarques supplémentaires. D'abord, les modules.o est un objet de fichier et il ne devrait pas être inclus dans un fichier source C. Deuxièmement, on ne peut pas avoir un fichier C ont une .o extension. Vous devriez effectivement une erreur lors de la compilation d'un .o fichier. Quelque chose comme:
Si vous avez vos deux fichiers source, vous pouvez les compiler dans les fichiers objets sans lien, comme ceci:
où la
-c
drapeau indique au compilateur de s'arrêter après la phase de compilation, sans liaison. Ensuite, vous pouvez lier vos deux fichiers objets de la manière suivante:Tout ceci est parfaitement normal, vous aurez généralement obtenir votre makefile pour compiler séparément et de les relier à la fin, de sorte que vous n'avez pas à recompiler à chaque fichier source unique chaque fois que vous modifiez l'un d'eux.
Parler
main.o
"d'appeler les fonctions"module.o
est parfaitement bien, mais un.o
fichier n'est pas un source fichier, il est compilé objet fichier. Si "mettre mon code source dans des fichiers avec l'extension.o
" signifie en réalité "compiler mon code source en fichiers avec l'extension.o
", alors la situation serait faire beaucoup plus de sens.Vous devriez être compris
.h
fichiers qui sont "en-têtes". Donc, si votre fichier principal est l'utilisation de modules vous devez inclure le module du fichier d'en-tête.