Compilation C

dmo95

Membre actif
24 Mai 2007
584
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 :

Bloc de code:
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.

Bloc de code:
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...
 
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 ?
 
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:
 
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:
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.)
 
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 :)
 
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.
 
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
 
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 !!
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.
 
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 !!
 
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
 
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:

Bloc de code:
#include <ncurses.h>
devrait régler le problème :)
 
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

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 :

Bloc de code:
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.

Bloc de code:
Macintosh:Test simonrichard$ gcc bataille7.c -o bataille7
bataille7.c: In function &#8216;str2int&#8217;:
bataille7.c:134: warning: incompatible implicit declaration of built-in function &#8216;strchr&#8217;
bataille7.c: In function &#8216;Parametres&#8217;:
bataille7.c:207: warning: incompatible implicit declaration of built-in function &#8216;strncpy&#8217;
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...