problème de compilation récurant !
prepa75
Membre
Bonsoir à tous,
Je m'adresse désespérement à vous car j'ai un gros souci de programmation modulaire en C en ce moment avec Xcode et je n'arrive pas à le régler !
dès que je créer plusieurs fichiers en les ajoutant au projet par ex j'ai : main.c , test.c et test.h.
je me retrouve avec cette erreur : "Command /Developer/usr/bin/gcc-4.2 failed with exit code 1"
j'ai essayer tout les compilateurs,éteint redémarrer Xcode et pourtant ça plante...
Je met ce code dans chaque fichier :
main.c :
test.h
et test.c
aidez moi svp parsque là je commence à m'arracher les cheveux !
Je m'adresse désespérement à vous car j'ai un gros souci de programmation modulaire en C en ce moment avec Xcode et je n'arrive pas à le régler !
dès que je créer plusieurs fichiers en les ajoutant au projet par ex j'ai : main.c , test.c et test.h.
je me retrouve avec cette erreur : "Command /Developer/usr/bin/gcc-4.2 failed with exit code 1"
j'ai essayer tout les compilateurs,éteint redémarrer Xcode et pourtant ça plante...
Je met ce code dans chaque fichier :
main.c :
#include <stdio.h><br />#include <stdlib.h><br />#include "test.c"<br /><br /><br />int main (int argc, const char * argv[]) {<br /> // insert code here...<br /> printf("\nHello, World!\n");<br /> return 0;<br />}<br />
test.h
int mafonction(int var);
et test.c
#include "test.h"<br /><br />int mafonction(int var)<br />{<br /> int var2 = 0;<br /> var2 = var*2;<br /> return var2;<br />}<br />
aidez moi svp parsque là je commence à m'arracher les cheveux !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Salut,
Le message que tu indique signale que le compilo a trouvé une erreur, le type d'erreur est signalé juste avant l'affichage du message que tu cites !
C'est cela que t'aidera pour trouver ton erreur.
example :
ld: duplicate symbol _main in /Users/rgbrgb/Documents/prepa75/build/prepa75.build/Debug/prepa75.build/Objects-normal/x86_64/prepa75AppDelegate.o and /Users/rgbrgb/Documents/prepa75/build/prepa75.build/Debug/prepa75.build/Objects-normal/x86_64/main.o
collect2: ld returned 1 exit status
Command /Volumes/snow/ios4/usr/bin/gcc-4.2 failed with exit code 1
Dans mon cas j'ai trouvé le problème : j'inclu un .c alors qu'il faut inclure un .h !
honte à moi de m'être tromper là -dessus (je t'autorise à me fouetter jusqu'au sang Draken )
Depuis quand on inclus des fichiers d'implémentation ?
Tu m'étonnes que tu aies un pb de linkage : du coup puisque tu as fait le #include "test.c" cela inclus (comme si tu l'avais copié/collé) le contenu de test.c donc de la définition de "mafonction", dans le fichier "main.c". Du coup quand il compile main.c il se retrouve avec la définition de "mafonction" dans le fichier objet main.o, et bien sûr il se retrouve aussi avec la définition de "mafonction" dans le fichier objet "test.o" résultat de la compilation de "test.c", donc quand il fait l'édition de liens il se retrouve avec deux fois la définition du symbole "mafonction"...!
Il faut bien évidemment include "test.h" à la place, pour qu'il inclus juste la déclaration, et ait donc juste connaissance de l'existence du symbole mais pas sa définition. Comme ça au linkage il n'a qu'une seule fois la définition du symbole "mafonction" (dans test.o) et pas deux.
[EDIT] J'ai le droit de te fouetter aussi ?
Technique dépassée, salissante et digne du moyen-âge. J'utiliserai une méthode plus moderne. * prend de la pâte à modeler, des aiguilles et le "Vaudou pour les Nuls" *
Pff j'ai limite honte d'avoir ouvert ce topic ! aller ce soir à la cave c 'est ma tournée !!!
plus sérieusement je comprend maintenant la différence entre les .h et les .c ! alala vivement que j'ai des cours structurés parsque là je commence à prendre des mauvaises habitudes !
.. ou faire un peu de lecture dans un livre technique.