[C] allegro et édition de lien

allegro et édition de lien [C] - C - Programmation

Marsh Posté le 19-09-2005 à 15:59:30    

Bonjour, j'ai téléchargé la bibliothèque allegro et l'ai installé sur mon ordi (les rpm suivants : allegro-4.0.3-5mdk.i586.rpm et liballegro4-4.0.3-5mdk.i586.rpm)
 
J'ai fait un programme test.c qui affiche "test" et ou j'inclus <allegro.h> pour voir si ca marche, voila ce que mon compilateur me dit :
 
[moi@localhost ~]$ gcc test.c -o test.x
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.3.2/../../../crt1.o(.text+0x18): In function `_start':
../sysdeps/i386/elf/start.S:98: undefined reference to `main'
collect2: ld returned 1 exit status
 
Que faut-il faire pour utiliser cette bibliothèque ?
 
Merci beaucoup  :hello:  
 
 
 

Reply

Marsh Posté le 19-09-2005 à 15:59:30   

Reply

Marsh Posté le 20-09-2005 à 11:52:38    

up

Reply

Marsh Posté le 20-09-2005 à 11:57:46    

A priori, ton fichier test.c n'a pas de fonction main  [:jean-guitou]
 
Tu peux nous le recopier ici ?


Message édité par Elmoricq le 20-09-2005 à 11:57:59
Reply

Marsh Posté le 20-09-2005 à 12:12:31    

c 'est un truc tout con :
 

Code :
  1. #include <stdio.h>
  2. #include <allegro.h>
  3. int main(void)
  4. {
  5.   printf("test\n" );
  6. }


 
j'ai cru voir que quand on utilise cette bibliothèque il faut mettre la macro END_OF_MAIN() à la sortie du main mais ca ne change rien.

Reply

Marsh Posté le 20-09-2005 à 12:12:41    

Bonjour
inclure le fichier allegro.h permet d'utiliser les fonctions qui y sont déclarées. En revanche, il faut aussi déclarer à l'éditeur de lien la bibliothèque à utiliser option -l
Si aucun fonction d'allegro n'est utilisée, l'éditeur de lien ne cherchera pas la bibliothèque vu qu'il n'en aura pas besoin.
Cordialement
 

Reply

Marsh Posté le 20-09-2005 à 12:14:06    

db__ a écrit :

Bonjour
inclure le fichier allegro.h permet d'utiliser les fonctions qui y sont déclarées. En revanche, il faut aussi déclarer à l'éditeur de lien la bibliothèque à utiliser option -l
Si aucun fonction d'allegro n'est utilisée, l'éditeur de lien ne cherchera pas la bibliothèque vu qu'il n'en aura pas besoin.
Cordialement


 
il suffit donc que j'utilise une fonction de la biblio, que je rajoute l'option -lalleg à la compil et c'est bon c'est bien ca?

Reply

Marsh Posté le 20-09-2005 à 12:31:11    

si la bibliothèque s'apelle alleg et qu'elle se trouve dans /usr/lib l'édition de lien doit pouvoir ce faire. Pour voir le réultat, je doute que l'emploie d'une seule fonction suffise.
un int main avec un return sur entier c'est plus joli.
au vu de l'erreur de compilation, il semblerait qu'il y a un problème dans la bibliothèque principale vu qu'il n'y trouve pas la fonction main

Reply

Marsh Posté le 20-09-2005 à 12:38:44    

Dans /usr/lib j'ai la biblio suivante : liballeg_unsharable.a.
 
Voici mon nouveau test :
 

Code :
  1. #include <allegro.h>
  2. int main(void)
  3. {
  4.   allegro_init();
  5.   return 0;
  6. }
  7. END_OF_MAIN()


 
lorsque je compile comme ceci : gcc test.c -o test.x j'ai les erreurs suivantes
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.3.2/../../../crt1.o(.text+0x18): In function `_start':
../sysdeps/i386/elf/start.S:98: undefined reference to `main'
/home/julien/tmp/ccwuBJwb.o(.text+0x1d): In function `_mangled_main':
: undefined reference to `install_allegro'
collect2: ld returned 1 exit status
 
 
si je fais gcc test.c -o test.x -lalleg   -->
/usr/bin/ld: cannot find -lalleg
collect2: ld returned 1 exit status
[:anathema]

Reply

Marsh Posté le 20-09-2005 à 13:01:00    

-lalleg_unsharable

Reply

Marsh Posté le 20-09-2005 à 13:14:17    

Harkonnen a écrit :

-lalleg_unsharable


 
je pense qu'une abbréviation du nom de la biblio suffit ( -lm pour la lib math ). J'ai essayé et j'ai ce même retour du compilo :
 
 
[julien@localhost ~]$ gcc test.c -o test.x -lalleg_unsharable
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.3.2/../../../crt1.o(.text+0x18): In function `_start':
../sysdeps/i386/elf/start.S:98: undefined reference to `main'
/home/julien/tmp/ccE2KzEa.o(.text+0x1d): In function `_mangled_main':
: undefined reference to `install_allegro'
collect2: ld returned 1 exit status
 
EN REVANCHE[julien@localhost ~]$ gcc test.c -o test.x -lalleg
/usr/bin/ld: cannot find -lalleg
collect2: ld returned 1 exit status
 
 :??:  

Reply

Marsh Posté le 20-09-2005 à 13:14:17   

Reply

Marsh Posté le 20-09-2005 à 13:17:21    

juju286 a écrit :

je pense qu'une abbréviation du nom de la biblio suffit ( -lm pour la lib math ).


 
Regarde le nom du fichier pour la lib math ;)

Reply

Marsh Posté le 20-09-2005 à 13:44:23    

libm.a, désolé...
mais je la trouve pas dans /usr/lib  :sweat:  
 
mais ca change pas mon problème  :??:  
même si je fais -lalleg_unsharable, ca foire  :??:  
 
 

Reply

Marsh Posté le 21-09-2005 à 12:13:10    

Bonjour
une suggestion
regarde si tu as dans le répertoire /usr/lib un fichier allegro.pc ou liballegro.pc ou un nom approchant.
Si c'est le cas, tu peux faire
gcc -o test test.c `pkg-config --cflags --libs allegro` le allegro devant être remplacé par ce qu'il y a devant .pc

Reply

Marsh Posté le 21-09-2005 à 13:57:11    

bonjour,
je n'ai pas de .pc.
par contre j'ai viré les rpm et j'ai téléchargé les sources, que j'ai installé.
 
à priori, pour la compilation, je fais  
 
[juju286@localhost ~]$ gcc test.c -o test.x -L/usr/local/lib -L/usr/X11R6/lib -lalleg-4.0.3 -lalleg_unsharable -export-dynamic
 
et c'est ok.
 
Seulement, l'éxécution donne ceci,
 
[julien@localhost ~]$ ./test.x
./test.x: error while loading shared libraries: liballeg.so.4.0: cannot open shared object file: No such file or directory
 
et j'ai vérifié le fichier liballeg.so.4.0, n'y est pas  :??:  alors que j'ai tout installé.
j'ai du oublié qq chose

Reply

Marsh Posté le 21-09-2005 à 13:59:14    

C'est à cause de l'option : -lalleg-4.0.3

Reply

Marsh Posté le 21-09-2005 à 18:47:40    

Elmoricq a écrit :

C'est à cause de l'option : -lalleg-4.0.3


 
il me semble qu'elle est nécessaire, lorsque je l'enlève ca ne compile pas.
 
bon j'ai fait un truc qui marche mais ca m'a l'air bourrin :
 
[juju286@localhost ~]$ gcc -o test test.c -L/usr/local/lib -L/usr/X11R6/lib -Wl,-export-dynamic -lalleg-4.0.3 -lalleg_unsharable -lm -lpthread -lXxf86dga -lXxf86vm -lXext -lX11 -ldl
 
et là quand je lance ./test, rien ne se passe, normal me direz-vous vu la gueule du programme  :lol: , mais pas d'erreur.
Donc à priori, c'est bon, je peux me lancer dans l'apprentissage.
 
 :hello:

Reply

Marsh Posté le 22-09-2005 à 12:48:58    

Bonjour
Une autre suggestion
essaye un link liballeg.so.4.0 liballeg.so.4.0.3
et relance la compilation sans les rajouts du dernier message

Reply

Sujets relatifs:

Leave a Replay

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