Comment faire pour récupérer des librairies sous linux-gcc

Comment faire pour récupérer des librairies sous linux-gcc - C - Programmation

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
Reply

Marsh Posté le 26-01-2006 à 15:58:03   

Reply

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.

Reply

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

Message cité 1 fois
Message édité par skelter le 26-01-2006 à 17:26:46
Reply

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)

Reply

Marsh Posté le 26-01-2006 à 19:43:02    

skelter a écrit :

le compilateur sait se débrouiller lorsque qu'une fonction n'est pas déclarée


 
[:pingouino]

Reply

Marsh Posté le 26-01-2006 à 20:00:41    

Il utilise une méthode éprouvée : l'erreur de compilation. ^_^


---------------
Viendez vous battre à Prologin \o/
Reply

Marsh 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]


---------------
Viendez vous battre à Prologin \o/
Reply

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

Reply

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

Reply

Marsh Posté le 26-01-2006 à 23:05:55    

Sauf pour le bazillion de warnings qu'il te balance.

Reply

Marsh Posté le 26-01-2006 à 23:05:55   

Reply

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.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

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)

Reply

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.

Reply

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 !


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 27-01-2006 à 08:38:16    

'Faut aimer jouer avec le feu :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed