allegro et édition de lien [C] - C - Programmation
Marsh Posté le 20-09-2005 à 11:57:46
A priori, ton fichier test.c n'a pas de fonction main  ![[:jean-guitou] [:jean-guitou]](https://forum-images.hardware.fr/images/perso/jean-guitou.gif) 
 
 
Tu peux nous le recopier ici ?
Marsh Posté le 20-09-2005 à 12:12:31
c 'est un truc tout con : 
 
| Code : 
 | 
 
 
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. 
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 
 
Marsh Posté le 20-09-2005 à 12:14:06
| db__ a écrit : Bonjour  | 
 
 
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?
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 
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 : 
 | 
 
 
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] [:anathema]](https://forum-images.hardware.fr/images/perso/anathema.gif) 
 
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 
 
  
  
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  
 
Marsh Posté le 20-09-2005 à 13:44:23
libm.a, désolé... 
mais je la trouve pas dans /usr/lib   
  
 
mais ca change pas mon problème   
   
même si je fais -lalleg_unsharable, ca foire   
  
 
 
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 
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é.
  alors que j'ai tout installé. 
j'ai du oublié qq chose 
Marsh Posté le 21-09-2005 à 13:59:14
ReplyMarsh 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   , mais pas d'erreur.
 , mais pas d'erreur. 
Donc à priori, c'est bon, je peux me lancer dans l'apprentissage. 
 
  
 
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 
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