Ce forum est en partie financé par l’affichage de publicités. Merci de désactiver votre bloqueur de publicités pour nous permettre de continuer à fournir ce service.

Compilation C

Discussion dans 'Développement Mac' créé par dmo95, 16 Août 2008.

  1. dmo95

    dmo95 Membre émérite

    Inscrit:
    24 Mai 2007
    Messages:
    584
    J'aime reçus:
    14
    Bonsoir,

    Voilà je me suis remis récemment au C, cela fait bientôt deux ans que je n'y ai pas touché. J'ai installer le SDK Xcode qui à l'air vraiment intéressant, cependant je n'arrive pas à compiler mon petit programme et ce même avec le Terminal :

    Code (Text):
    gcc bataille7.c -o bataille7
    Cela me retourne des Warnings qui si je me souvient bien ne bloquent pas la création de l'exécutable, mais le messages ne contient pas que des warnings.

    Code (Text):
    Macintosh:Test simonrichard$ gcc bataille7.c -o bataille7
    bataille7.c: In function ‘str2int’:
    bataille7.c:134: warning: incompatible implicit declaration of built-in function ‘strchr’
    bataille7.c: In function ‘Parametres’:
    bataille7.c:207: warning: incompatible implicit declaration of built-in function ‘strncpy’
    Undefined symbols:
      "_getch", referenced from:
          _Jouer in cckujT9x.o
          _Jouer in cckujT9x.o
          _Jouer in cckujT9x.o
          _main in cckujT9x.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
     
    Si quelqu'un serait en mesure de m'éguiller sur le sujet...
     
  2. ntx

    ntx Vénérable sage
    Club MacG

    Inscrit:
    15 Octobre 2004
    Messages:
    12 008
    J'aime reçus:
    361
    Bon les deux warnings, c'est pas grave mais il faudrait corriger, c'est plus propre. Il faudrait voir ton code.
    Pour l'erreur, c'est un problème de linkage pas de compilation : lors de la génération de l'application le linker ld, appelé par gcc, n'a pas trouvé certains symboles qui ne sont donc pas définis dans ton fichier bataille7.c. En gros il te manque des morceaux dans ta commande de compilation, en l'occurrence la définition de la fonction getch qui à mon avis en ANSI est plutôt getchar. Ton code ne viendrait-il pas de Windows ?
     
  3. dmo95

    dmo95 Membre émérite

    Inscrit:
    24 Mai 2007
    Messages:
    584
    J'aime reçus:
    14
    Si exactement, mon code provient de Windows... Mais je ne vois pas ou j'utilise ce _getch ? et le "referenced from" et les fichiers .o. J'interprète pas du tous le message d'erreur !!

    Et donc si il provienne de Windows, quelle solution adopter ?

    Merci encore.

    PS : Ce n'est pas bien grave si je laisse les warnings et que je nettoie pas mon code, car il s'agit d'un petit jeu réalisé il y a bientôt deux ans. Ma démarche est juste pour mettre un petit screenshot et mettre tous ca en ligne pour montrer un peu ce que j'ai pu faire au cours de mon cursus. Et vu que je ne compte pas me remettre au C... :up::up:
     
  4. p4bl0

    p4bl0 Membre d’élite
    Club MacG

    Inscrit:
    12 Juillet 2004
    Messages:
    4 772
    J'aime reçus:
    425
    toutes ces fonctions getchar, getch etc peuvent très bien être en fait des macros défini dans les header de la glibc (ça dépend des implémentations, j'ai découvert ça en lisant des .h ^^ et c'est pas à chaque fois la même chose...).

    Regarde si tu inclus bien tous les bons headers, et fais voir le code qu'on puissent regarder ça un peu quand même :)


    (Les *.o sont des fichiers temporaires, ce sont les fichiers compilé mais pas encore linkés dans l'exécutable.)
     
  5. p4bl0

    p4bl0 Membre d’élite
    Club MacG

    Inscrit:
    12 Juillet 2004
    Messages:
    4 772
    J'aime reçus:
    425
    getch n'est pas standard du tout en fait, je me suis mélangé les pinceau avec getc.
    getchar() = getc(stdin)
    et getc est parfois implémenté elle même en tant que macro... C'est un joyeux bazar quand même ^^

    fais voir le bout de code avec getch comme ça on voit comment et par quoi le remplacer :)
     
  6. dmo95

    dmo95 Membre émérite

    Inscrit:
    24 Mai 2007
    Messages:
    584
    J'aime reçus:
    14
    Euh ouai je peux éventuellement le mettre en ligne mais le mettre sur le forum devrait être un peu lourd... Le programme fait un peu 1000 lignes :p.

    Mais je voix que tu t'intéresse de près à mon problème donc je vais le mettre en ligne sur mon blog.
     
  7. ntx

    ntx Vénérable sage
    Club MacG

    Inscrit:
    15 Octobre 2004
    Messages:
    12 008
    J'aime reçus:
    361
    1000 lignes c'est rien tu peux le zipper et le joindre à un message sur le forum.
     
  8. dmo95

    dmo95 Membre émérite

    Inscrit:
    24 Mai 2007
    Messages:
    584
    J'aime reçus:
    14
    Donc voilà, j'ai mis le petit programme en ligne, si tu as le temps de jeter un coup d'oeil. Le code est relativement propre dans la sémantique mais assez long. C'était les début de la programmation, code pas du tout modulaire désolé !!

    Disponible ici
     
  9. ntx

    ntx Vénérable sage
    Club MacG

    Inscrit:
    15 Octobre 2004
    Messages:
    12 008
    J'aime reçus:
    361
    Ce n'est _getch qu'il faut chercher mais getch (le '_' est ajouté par le compilateur pour son usage interne). Tu en as plusieurs dans ton code. Il faut que tu revois tout le code qui fait l'affichage dans le terminal pour que cela tourne sur Unix en respectant la norme ANSI, et pas sur Windows en dehors de toutes les normes.

    PS : pour ton CV, je ne suis pas sûr que ce genre de travail impressionne des masses un recruteur.
     
  10. dmo95

    dmo95 Membre émérite

    Inscrit:
    24 Mai 2007
    Messages:
    584
    J'aime reçus:
    14
    Oui effectivement :p, mais c'était au début (bien que je ne me suis pas amélioré dans le domaine, puisque nous avons arrêté de pratiquer le C). En quoi consiste-t-elle cette norme ANSI, je vais aller voir du côté de Google.

    Ceci dis, j'ai le souvenir de l'avoir fait tourner sur Ubuntu à l'université... Vraiment bizard !!
     
  11. ntx

    ntx Vénérable sage
    Club MacG

    Inscrit:
    15 Octobre 2004
    Messages:
    12 008
    J'aime reçus:
    361
    Peut être que le C fournit avec Ubuntu connaît getch pour ne pas dérouter les développeurs Windowsiens, mais c'est sûr que ce n'est pas dans la norme :D
     
  12. p4bl0

    p4bl0 Membre d’élite
    Club MacG

    Inscrit:
    12 Juillet 2004
    Messages:
    4 772
    J'aime reçus:
    425
    Le C ANSI (American National Standards Institute ou un truc du genre) est la même chose que le C ISO (International Standard Organization) et c'est la seule vraie norme :)

    Ubuntu est livré avec GCC donc la même chose que le compilo sur OS X, bizarre que ça ai fonctionné...


    Si je comprend bien getch() récupère un caractère tapé au clavier et ce caractère ne sera pas affiché, ça, çame fait tout de suite penser à ncurses, et ça, ça me fait tout de suite penser que getch() et dispo avec ncurses, je sais pas pourquoi j'y ai pas pensé avant ^^ Désolé :rateau:

    Code (Text):
    #include <ncurses.h>
    devrait régler le problème :)
     
  13. tatouille

    tatouille Vétéran

    Inscrit:
    1 Juin 2004
    Messages:
    5 174
    J'aime reçus:
    494
    il te manque un include
    $> man strchr

    NAME
    strchr, strrchr -- locate character in string

    LIBRARY
    Standard C Library (libc, -lc)

    SYNOPSIS
    #include <string.h>


    $> man getch
    curs_getch(3X)
    NAME
    getch, wgetch, mvgetch, mvwgetch, ungetch, has_key - get (or push back)
    characters from curses terminal keyboard

    SYNOPSIS
    #include <curses.h>


    -lcurses

    that's all il te manque un lien vers la lib ou et implemente le symbol


    gcc -ansi -Werror bataille7.c -o bataille7 -lcurses

     
Chargement...