IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Erreur de Compilation


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut Erreur de Compilation
    Bonjour,

    J'ai des sources d'un programme de jeu de réflexion (Othello) nommé "zebra" qu'on peut récupérer sous la forme "zebra.tar.gz" à l'adresse suivante :

    http://radagast.se/othello/zebra.tar.gz

    Je suis sous Snow leopard avec processeur intel Core 2 Duo et je n'arrive pas à compiler malgré la modification du Makefile( j'ai juste supprimé "-DUSE_PENTIUM_ASM" de la ligne 126 et remplacé -mtune=pentium2 par -mtune=generic comme conseillé par certains)
    En effet lorsque je fais "make all" comme indiqué par le README j'obtiens ce message d'erreur:

    game.c:20:17: error: dir.h: No such file or directory
    game.c: In function ‘global_setup’:
    game.c:145: warning: implicit declaration of function ‘getcwd’
    make: *** [game.o] Error 1
    macbook-de-9ae6:zebra ae6$


    Voilà je suis perdu si quelqu'un pouvait m'aider ça serait cool surtout que ce programme compilé m'aiderait à me préparer aux prochains championnat mondial d'othello si vous connaissez ...
    Merci d'avance ^^

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 464
    Par défaut
    Citation Envoyé par l9ae6l Voir le message
    game.c:20:17: error: dir.h: No such file or directory
    game.c: In function ‘global_setup’:
    game.c:145: warning: implicit declaration of function ‘getcwd’
    make: *** [game.o] Error 1
    macbook-de-9ae6:zebra ae6$


    Voilà je suis perdu
    Si tu traduis les messages en français, ça devient presque limpide :

    Citation Envoyé par l9ae6l Voir le message
    game.c: ligne 20: 17: erreur : dir.h: Fichier inexistant (ou introuvable).

    [et, par conséquent :]

    game.c: dans la fonction ‘global_setup’ :
    game.c:145: attention: déclaration implicite de la fonction ‘getcwd’
    make: *** [game.o] Erreur 1
    macbook-de-9ae6:zebra ae6$

    Autrement dit, il ne trouve pas le fichier « dir.h », et le fichier dir.h doit probablement avoir un rapport avec la suite puisque que l'on utilise soit-disant une fonction sans l'avoir déclarée explicitement auparavant. Surtout quand on sait que « getcwd » signifie « Get Current Working Directory ».

    C'est une fonction standard Unix qui se trouve, donc, dans « unistd.h », comme le précise la man page de la fonction getcwd().

    Essaie de remplacer dir.h par unistd.h. Si cela provoque d'autres erreurs, remet dir.h en plus de unistd.h.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut
    Merci beaucoup Obsidian pour ton aide ton astuce fait que je suis à 98% de la compilation c'est presque réussi !. Il manque encore un truc mais je ne trouve pas je suis désolé pour ma nullité...
    En remplaçant "dir.h" par "unistd.h" j'obtiens ceci :
    timer.c:45:21: error: windows.h: No such file or directory
    timer.c: In function ‘reset_real_timer’:
    timer.c:110: warning: implicit declaration of function ‘GetTickCount’
    timer.c: In function ‘get_real_timer’:
    timer.c:160: error: ‘CLK_TCK’ undeclared (first use in this function)
    timer.c:160: error: (Each undeclared identifier is reported only once
    timer.c:160: error: for each function it appears in.)
    make: *** [timer.o] Error 1
    macbook-de-9ae6:zebra ae6$


    Et en rajoutant "unistd.h" en plus de "dir.h" je compile à 50% seulement et j'obtiens ceci :
    game.c:20:17: error: dir.h: No such file or directory
    make: *** [game.o] Error 1
    macbook-de-9ae6:zebra ae6$


    Autrement dit il faut je suppose rajouter encore un #include dans timer.h qui possède entre autre la bibliothèque windows.h mais je ne connais pas

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 464
    Par défaut
    Citation Envoyé par l9ae6l Voir le message
    Autrement dit il faut je suppose rajouter encore un #include dans timer.h qui possède entre autre la bibliothèque windows.h mais je ne connais pas
    « windows.h » (et GetTickCount()) sont des éléments du monde MS Windows. C'est normal qu'il ne les trouve pas si tu ne compiles pas sous Windows.

    Cependant, zebra est fait pour compiler sur plusieurs plateformes, UNIX comprise. Par contre, à l'époque où le logiciel a été écrit, l'auteur n'a pas pris en compte MacOS X, qui devrait être compatible.

    Remet « dir.h » à sa place, ouvre porting.h et, entre le #define et le #endif, essaie d'ajouter soit « #define __CYGWIN__ », soit « #define __linux__ », en respectant le nombre de « _ ».

    Il s'agit ni d'un système ni de l'autre, mais ce sont des symboles que le programme connaît. Il est possible qu'il retombe sur ses pieds avec cela.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut
    Merci encore Obsidian pour l'aide.

    J'ai essayé "#define __linux__" et maintenant j'ai le message suivant:

    :zebra.c:97: error: ‘wait’ redeclared as different kind of symbol
    /usr/include/sys/wait.h:255: error: previous declaration of ‘wait’ was here
    make: *** [zebra.o] Error 1
    macbook-de-9ae6:zebra ae6$


    Ca progresse ça progresse on dirait ^^

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 464
    Par défaut
    Citation Envoyé par l9ae6l Voir le message
    Ca progresse ça progresse on dirait ^^
    Ça progresse, mais ce n'est pas le même système. Donc, dans tous les cas, il y aura des adaptions à faire. Regarde sur le site, il y a plusieurs versions de Zebra pour des plateformes différentes. Peut-être que l'une d'entre elles fonctionnera mieux.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut
    Justement l'autre version de Zebra c'est à dire LZebra qui n'est rien d'autre que zebra compilé sur linux avec interface graphique est une ancienne version et en plus elle est buggée.
    Si je m'acharne autant à compiler ce zebra c'est justement parce que ces sources compilent zebra sans interface graphique. C'est très pratique pour que je puisse faire des scripts afin que mon ordi calcule jours et nuits pendant que je pars travailler et gagner ainsi du temps masqué. Je sais le compiler sous n'importe quel système linux (sauf les 64 bits) j'ai juste à enlever de la ligne 126 "-DUSE_PENTIUM_ASM" du Makefile et le tour est joué.

    C'est ma seule solution d'autant plus que c'est presque compilé avec tes modifications ! ^^, biensûr je pourrai mettre un linux sur mon mac mais du coup je me retrouve avec d'autres problèmes tels que le clic droit la précision du trackpad etc...

    Donc pas d'autres petites idées concernant mon dernier message d'erreur? (je vous paye le café !^^)

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 464
    Par défaut
    Citation Envoyé par l9ae6l Voir le message
    Donc pas d'autres petites idées concernant mon dernier message d'erreur? (je vous paye le café !^^)
    C'est-à-dire qu'il va falloir faire de vraies adaptations, il ne s'agit plus de chercher les bons flags. Peut-être qu'il existe une configuration adaptée mais, sans Mac sous la main, je ne peux pas essayer de deviner laquelle.

    En l'occurence, « wait » est un appel système UNIX assez notable, qui sert à attendre la fin de ses processus fils et, dans ce programme, le même symbole est utilisé pour déclarer une variable globale dans zebra.c.

    Ça compile bien sous Linux parce que cet appel est déclaré dans « sys/wait.h » explicitement et que le compilo n'en a donc pas connaissance au moment où il mouline zebra.c. Comme ce symbole n'est utilisé nulle part ailleurs, il est directement résolu et disparaît avant l'édition des liens. Or, apparement, cet appel système est déclaré sur Mac dans un fichier que tu inclus, directement ou indirectement.

    Tu peux essayer de renommer, dans zebra.c, le symbole « wait » en « waitz », par exemple, aux lignes suivantes : 97, 179, 267, 987 et 1262.

    Note : je te file mon adresse en privé pour que tu me mailes un café !

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut
    Après modification de wait en waitz au lignes indiqués
    j'obtiens le message suivant :

    ld: warning: option -s is obsolete and being ignored
    ld: library not found for -lcrt0.o
    collect2: ld returned 1 exit status
    make: *** [zebra] Error 1
    macbook-de-9ae6:zebra ae6$


    zebra.o est passé on dirait ! par contre la librarie ld je ne vois pas ce que c'est... : /

    note : Oui et je te dois un double café maintenant ^^

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 464
    Par défaut
    zebra.o est passé on dirait ! par contre la librarie ld je ne vois pas ce que c'est... : / note : Oui et je te dois un double café maintenant ^^
    En l'occurrence, « ld », ce n'est pas la bibliothèque éponyme, c'est le linker lui-même. Une fois compilé, il faut bien lier le programme aux bibliothèques qu'il utilise et « crt », c'est « C runtine ». Autrement dit, la bibliothèque C standard.

    Cependant, le problème a l'air d'être connu sur Mac. Il y a un début de solution ici : http://lists.apple.com/archives/Xcod.../msg00693.html

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut
    l'option "-macosx-version-min 10.4" de ld je ne sais vraiment pas comment l'intégrer avec l'instruction "make all" lorsque je compile.

    J'ai testé "ld -macosx-version-min 10.4 make all" biensûr ça ne marche pas.
    Je suis vraiment désolé de ma nullité en informatique ce n'est pas mon domaine ^^

    note : triple café xD

  12. #12
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 464
    Par défaut
    Citation Envoyé par l9ae6l Voir le message
    J'ai testé "ld -macosx-version-min 10.4 make all" biensûr ça ne marche pas. Je suis vraiment désolé de ma nullité en informatique ce n'est pas mon domaine ^^

    note : triple café xD
    Vu comment le Makefile est fait, j'essaierais de l'ajouter aux LDFLAGS, à la suite des autres, en ligne 113. Mais, à ce stade, ce ne sont que des hypothèses. Sans Mac sous les doigts, impossible d'affirmer quoi que ce soit avec certitude.

    J'amène les croissants.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut
    Bonsoir,
    J'ai rajouté l'option dans le Makefile à la ligne 113 comme ceci(en gras):

    LDFLAGS = -static -lm -lz -macosx_version_min 10.4

    Est-ce bien comme ça qu'il faut faire? pas de guillemets?
    Sinon en supposant que c'est ainsi la syntaxe et bien j'obtiens le message suivant :

    i686-apple-darwin10-gcc-4.2.1: 10.4: No such file or directory
    make: *** [zebra] Error 1
    macbook-de-9ae6:zebra ae6$


    Voilà j'en suis à ce stade à l'heure actuelle

    note : quadrule café?

  14. #14
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 464
    Par défaut
    Citation Envoyé par l9ae6l Voir le message
    LDFLAGS = -static -lm -lz -macosx_version_min 10.4
    Il manque un « m » : -mmacosx_version_min 10.4

    « -m » est le nom de l'option et « macosx_… » la suit.

    note : quadrule café?
    Au bout d'un moment, on va finir par ne plus coder droit !

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut
    bon j'ai mis -mmacosx_version_min 10.4 à la place de -macosx_version_min 10.4 mais ça ne change rien du tout j'ai le même message d'erreur.
    Quand je fais "man ld" sous mac os OX ils disent :
    -macosx_version_min version
    This is set to indicate the oldest Mac OS X version that that
    the output is to be used on. Specifying a later version
    enables the linker to assumes features of that OS in the out-
    put file. The format of version is a Mac OS X version number
    such as 10.4 or 10.5
    C'est pour ça que j'avais mis un seul "m". Pas une autre petite idée ? ^^

    Note : quintuple mojito? ^^

  16. #16
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 464
    Par défaut
    Citation Envoyé par l9ae6l Voir le message
    bon j'ai mis -mmacosx_version_min 10.4 à la place de -macosx_version_min 10.4 mais ça ne change rien du tout j'ai le même message d'erreur.
    Quand je fais "man ld" sous mac os OX ils disent :


    C'est pour ça que j'avais mis un seul "m". Pas une autre petite idée ? ^^

    Note : quintuple mojito? ^^
    Alors, de manière complètement hypothétique, il reste ceci :

    http://lists.apple.com/archives/Xcod.../msg00699.html
    http://lists.apple.com/archives/Xcod.../msg00686.html

    Essaie d'ajouter par exemple « -isysroot /Developer/SDKs/ MacOSX10.4u.sdk » mais ça dépend réellement de l'environnement installé et tout et tout.

    À ce stade, je pense qu'un expert Mac (ou au moins quelqu'un qui en a un sous la main) serait plus à même de t'aider.

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo