problème de compilation récurant !

prepa75prepa75 Membre
17:38 modifié dans API AppKit #1
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 :
#include &lt;stdio.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;test.c&quot;<br /><br /><br />int main (int argc, const char * argv&#91;]) {<br />&nbsp; &nbsp; // insert code here...<br />&nbsp; &nbsp; printf(&quot;&#092;nHello, World!&#092;n&quot;);<br />&nbsp; &nbsp; return 0;<br />}<br />


test.h
int mafonction(int var);


et test.c
#include &quot;test.h&quot;<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 !  B)

Réponses

  • devulderdevulder Membre
    17:38 modifié #2
    dans 1283029848:

    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 :
    #include &lt;stdio.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;test.c&quot;<br /><br /><br />int main (int argc, const char * argv&#91;]) {<br />&nbsp; &nbsp; // insert code here...<br />&nbsp; &nbsp; printf(&quot;&#092;nHello, World!&#092;n&quot;);<br />&nbsp; &nbsp; return 0;<br />}<br />
    


    test.h
    int mafonction(int var);
    


    et test.c
    #include &quot;test.h&quot;<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 !  B)


    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


  • prepa75prepa75 Membre
    17:38 modifié #3
    Merci devulder pour l'info mais je ne te cache pas que la phrase ne m'aide pas des masses ^^ il doit surement exister un ptit fichier avec la correspondance des erreurs du débugueur non ?

    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 )
  • AliGatorAliGator Membre, Modérateur
    17:38 modifié #4
    #include "test.c" ?!
    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 ?
  • DrakenDraken Membre
    août 2010 modifié #5
    dans 1283031889:

    honte à  moi de m'être tromper là -dessus  >:) >:)   (je t'autorise à  me fouetter jusqu'au sang Draken )


    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" *



  • prepa75prepa75 Membre
    17:38 modifié #6
    dans 1283032458:

    [EDIT] J'ai le droit de te fouetter aussi ?


    Pff j'ai limite honte d'avoir ouvert ce topic ! aller ce soir à  la cave c 'est ma tournée !!!    o:) >:) >:) >:) >:)

    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 !  B)
  • DrakenDraken Membre
    17:38 modifié #7
    dans 1283079113:

    alala vivement que j'ai des cours structurés


    .. ou faire un peu de lecture dans un livre technique.




  • prepa75prepa75 Membre
    17:38 modifié #8
    oui jsuis daccord avec toi Draken cependant un bon cour motive a ouvrir les docs techniques...je sais que si je le vois en cour, je vais poser plein de questions certes toutes bêtes mais qui pour moi m'aide a coder convenablement !
Connectez-vous ou Inscrivez-vous pour répondre.