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
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
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é.
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.
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