Comment faire pour récupérer des librairies sous linux-gcc - C - Programmation
Marsh Posté le 26-01-2006 à 16:35:47
Pour les entêtes: je te laisse le soin de consulter http://forum.hardware.fr/hardwaref [...] 4-1.htm#t0
pour les undefined: si les fonctions que tu appelles n'appartiennent à aucun fichier d'entête que tu inclues, c'est normal qu'il ne puisse compiler.
collect2: le link est impossible puisque les binaires n'ont pas été générés
stdio.h ne contient pas tout, et en général ne suffit pas.
Marsh Posté le 26-01-2006 à 17:26:08
_darkalt3_ a écrit : pour les undefined: si les fonctions que tu appelles n'appartiennent à aucun fichier d'entête que tu inclues, c'est normal qu'il ne puisse compiler. |
si il arrive à compiler (le compilateur sait se débrouiller lorsque qu'une fonction n'est pas déclarée), c'est ld (le linker gnu) qui gueule
Marsh Posté le 26-01-2006 à 18:58:05
Je ne suis pas sûr que conio.h existe sous Linux, surtout que cette lib n'est pas reconnue par le standard ANSI.
Pour ncurses, suffit de l'installer accompagné des libs de développement....
stdio = standard input/output, ça contient seulement ce qu'il faut pour faire des printf, des scanf et de la lecture de fichiers (en gros)
Marsh Posté le 26-01-2006 à 19:43:02
ReplyMarsh Posté le 26-01-2006 à 20:04:11
Pour ce qui est des curses, il faut installer le paquet correspondant. Je ne me souviens plus du nom : c'est probablement ncurses-dev ou quelque chose de proche.
Dans une console root :
# apt-cache search ncurses | grep dev
... (Noter le nom du paquet dans ce qui sort)
# apt-get install [le paquet en question]
Marsh Posté le 26-01-2006 à 21:08:18
Zavie a écrit : Il utilise une méthode éprouvée : l'erreur de compilation. ^_^ |
non, il génère une déclaration dite implicite, ca n'entraine pas d'erreur à l'étape compilation mais à l'édition des lien si la fonction n'est pas définie
Marsh Posté le 26-01-2006 à 23:02:33
skelter a écrit : non, il génère une déclaration dite implicite, ca n'entraine pas d'erreur à l'étape compilation mais à l'édition des lien si la fonction n'est pas définie |
effectivement : si on lui demande l'option -c (c'est-à-dire complilation sans édition de liens), il s'en moque pas mal
Marsh Posté le 26-01-2006 à 23:11:45
skelter a écrit : non, il génère une déclaration dite implicite, ca n'entraine pas d'erreur à l'étape compilation mais à l'édition des lien si la fonction n'est pas définie |
Mais si elle est définie et que le code est compilable, le comportement est indéfini.
Marsh Posté le 27-01-2006 à 00:00:37
Emmanuel Delahaye a écrit : Mais si elle est définie et que le code est compilable, le comportement est indéfini. |
tout a fais, ca peut etre la cause de bugs assez vicieux et gcc y dédie un warning (option -Wimplicit)
Marsh Posté le 27-01-2006 à 00:16:54
jimipage a écrit : effectivement : si on lui demande l'option -c (c'est-à-dire complilation sans édition de liens), il s'en moque pas mal |
L'edition de lien passe aussi si la fonction existe. Le linkeur s'en moque encore plus que le compilo (et pour cause, le linkeur ne voit pas les declarations). Bref appeler une fonction non definie ca ne genere pas d'erreur. Au mieux, un warning.
Marsh Posté le 27-01-2006 à 08:02:21
matafan a écrit : L'edition de lien passe aussi si la fonction existe. Le linkeur s'en moque encore plus que le compilo (et pour cause, le linkeur ne voit pas les declarations). Bref appeler une fonction non definie ca ne genere pas d'erreur. Au mieux, un warning. |
Avec gcc, je recommande
-Werror-implicit-function-declaration |
ça fait le ménage !
Marsh Posté le 26-01-2006 à 15:58:03
Bonjour,
Je suis un newbie de la programmation en c et de linux (ubuntu), et j'essaie de faire fonctionner un programme en C (avec gcc 4.02) permettant d'acquérir les valeurs d'un petit clavier 12 touches que j'ai réalisé et qui se branche sur le port parallèle de mon pc (laptop-acer aspire 1350). J'avais déjà réalisé un programme qui fonctionnait sous le dos :
>#include<stdio.h>
>#include<conio.h>
>
>main()
>{
> int x,i;
> clrscr();
> for(i=1;i<10;i++)
> {
>
> do
> {
> x=inportb(0x379);
> x=x&0x0080;
> }while(x!=0);
>
> do
> {
> x=inportb(0x379);
> x=x&0x0080;
> }while(x==0);
>
> x= inportb(0x379);
> x=x>>3;
> printf("key is : %d\n",x);
>
> }
>}
Mais lorsque j'essai de le compiler sous linux j'obtiens les messages d'erreur suivant :
>romain@rom:~/Major Project$ gcc -c Keypad-1.c
>Keypad-1.c:2:18: error: conio.h: No such file or directory
et
> romain@rom:~/Major Project$ gcc -o Keypad-1 Keypad-1.o
> Keypad-1.o: In function `main':
> Keypad-1.c.text+0x1d): undefined reference to `clrscr'
> Keypad-1.c.text+0x3f): undefined reference to `inportb'
> Keypad-1.c.text+0x63): undefined reference to `inportb'
> Keypad-1.c.text+0x85): undefined reference to `inportb'
> collect2: ld returned 1 exit status
Apparement, le conio.h n'existe plus sous linux, il serait remplacer par un certain ncurses.h , plus complet. Seulement lorque j'essaie de le remplacer , j'obtien le message d'erreur suivant :
> romain@rom:~/Major Project$ gcc -c Keypad-1.c
> Keypad-1.c:2:20: error: ncurses.h: No such file or directory
> romain@rom:~/Major Project$ gcc -o Keypad-1 Keypad-1.o
> Keypad-1.o: In function `main':
> Keypad-1.c.text+0x1d): undefined reference to `clrscr'
> Keypad-1.c.text+0x3f): undefined reference to `inportb'
> Keypad-1.c.text+0x63): undefined reference to `inportb'
> Keypad-1.c.text+0x85): undefined reference to `inportb'
> collect2: ld returned 1 exit status
C donc le meme probleme, Alors voilà mes questions:
-Comment faire pour rajouter les librairies conio.h et/ou ncurses.h
-Y'a t'il un rapport avec les undefined reference to ...
-Que veut dire "collect2: ld returned 1 exit status"
-Est-ce que la librairie stdio.h ne suffit pas à elle seul ?
Merci d'avance pour votre aide!
Message édité par ni4m0r le 26-01-2006 à 16:00:33