Erreur de lien .h (débutant) - C - Programmation
Marsh Posté le 31-12-2004 à 04:04:03
Est-ce que sdl-ttf est instalé sur la machine où tu compiles ?
Marsh Posté le 31-12-2004 à 12:11:41
sedrilo a écrit : |
C'est une erreur de l'éditeur de lien (ld)
T'es sûr du nom des bibliothèques ? Pas d'extension (.a), pas de 'lib' dans le nom ?
Citation : gcc -Wall -Werror graphik7.c -lSDL -lSDL_ttf -o graphik7 |
T'es sûr que tu as besoin de SDL_ttf ? Tu ne serais pas en train de confondre les fichiers d'interfaces (.h) et les bibliothèques ?
Marsh Posté le 31-12-2004 à 14:51:48
Oui, c'est vrai je confond toujours les .h et .a
Le problème c'est que dans mon makefile si j'enlève -lSDL_ttf, je me retrouve à la compilation avec :
[sedrilo@Sed projet]$ make
gcc -Wall -Werror graphik7.c -lSDL -o graphik7
/home/sedrilo/tmp/ccnyJ3mB.o(.text+0x234): In function `main':
: undefined reference to `TTF_Init'
/home/sedrilo/tmp/ccnyJ3mB.o(.text+0x239): In function `main':
: undefined reference to `TTF_Init'
/home/sedrilo/tmp/ccnyJ3mB.o(.text+0x534): In function `vTexte':
: undefined reference to `TTF_OpenFont'
/home/sedrilo/tmp/ccnyJ3mB.o(.text+0x581): In function `vTexte':
: undefined reference to `TTF_RenderText_Solid'
/home/sedrilo/tmp/ccnyJ3mB.o(.text+0x5a0): In function `vTexte':
: undefined reference to `TTF_RenderText_Shaded'
/home/sedrilo/tmp/ccnyJ3mB.o(.text+0x64e): In function `vTexte':
: undefined reference to `TTF_CloseFont'
collect2: ld returned 1 exit status
make: *** [graphik7] Erreur 1
Or toutes ces fonctions sont décrites dans le SDL_ttf.h inclus grace à la commande #include "../SDL-1.2.7/include/SDL_ttf.h"
... ?
Marsh Posté le 31-12-2004 à 15:18:51
a mon avis, il te manque le paquet SDL_ttf-dev ou SDL_ttf-devel suivant ta distrib.
Marsh Posté le 31-12-2004 à 15:26:15
Ce qui veut dire que j'aurais mal installé ma librairie ?
Marsh Posté le 31-12-2004 à 15:30:48
Apparement, tu as extrais les fichiers SDL dans un de tes répertoires et pas dans ton répertoires ou ya toutes les librairies...
Or, si tu dis à GCC de lier avec SDL_ttf juste en mettant -lSDL_ttf, il risque d'avoir du mal à trouver ce qu'il veut ...
Le mieux serait surement d'installer le paquet de développement SDL livré avec ta distrib ...
Marsh Posté le 31-12-2004 à 16:29:41
Merci du conseil, mais SDL se trouve sur le CD 4 de LINUX, et je n'arrive pas à le trouver sur le net (autre qu'emule qui prendrait plusieurs jours) car il semble payant (reservé aux membres de la "communauté" ).
Marsh Posté le 31-12-2004 à 16:41:10
Recherche sur le net (genre http://rpm.pbone.net/) pour trouver des rpms adaptés... (je suppose que t'as une Mandrake 10 ?)
Marsh Posté le 31-12-2004 à 16:53:43
Je te conseil de lire ça :
http://linux-wizard.net/faq.php?se [...] y=app_find, ainsi que http://linux-wizard.net/howto.php? [...] ckages#rpm
Marsh Posté le 31-12-2004 à 19:19:41
Oui, le mieux est de l'installer à partir de la distrib, soit 30h de téléchargement sur un vieux serveur que j'ai trouvé...
Sinon en fait je ne sais pas comment inclure ma librairie dans mon programme : J'ai fait ./configure et make pour installer la librairie sdl_ttf, et je la lie dans mon fichier principal en faisant #include "../SDL_ttf/SDL_ttf.h" car c'est là qu'elle s'est retrouvée installé (le .h en tout cas).
C'est pas comme ça qu'on fait ?
A quoi correspondent les SDL_ttf-dev et SDL_ttf-devel, je ne les ai pas installés ceux là !! J'ai juste décompacté SDL_ttf-2.0.7.tar.gz et installé, mais il existe un fichier SDL_ttf-devel-2.0.7-1.i386.rpm (ce dernier requiers également le CD4 pour s'installer..., idem avec ma recherche d'après les conseils de Multani, il me demande le CD4)
Marsh Posté le 01-01-2005 à 11:51:08
Normalement #include "SDL_ttf.h" c'est bon (et #include "SDL.h" ).
Tu devrais utiliser sdl-config, c'est plus propre :
sdl-config --cflags pour les flags du compilateur.
sdl-config --libs pour les flags du linker.
gcc graphik7.c `sdl-config --cflags --libs` -lSDL_ttf -o graphik7
(enfin dans ton Makefile tu définit CFLAGS et LFLAGS en fonction :
CFLAGS = `sdl-config --cflags`
LFLAGS = `sdl-config --libs` -lSDL_ttf
et ça devrait rouler).
Sinon effectivement on dirait qu'il te manque le paquet de développement de SDL_ttf, SDL_ttf-devel* doit être le bon je pense. Tu peux pas le télécharger ?
Marsh Posté le 02-01-2005 à 22:57:18
C'est bon depuis j'ai récupéré le CD4 et j'ai installé le package.
La compilation ne marchait toujours pas, j'ai donc mis ta ligne dans le makefile et ça a compilé. Nikel !
Merci à tous !
Marsh Posté le 31-12-2004 à 02:30:31
Salut! On a déjà du vous poser la question 100 fois, mais jsuis fatigué et ça fait une heure que je suis sur cette erreur je comprend pas.
Mon makefile :
graphik7 : graphik7.c
$(CC) $(CCFLAGS) graphik7.c -lSDL -lSDL_ttf -o graphik7
le haut de mon graphik.c :
#include <stdlib.h>
#include "../SDL-1.2.7/include/SDL.h"
#include "../SDL-1.2.7/include/SDL_ttf.h"
mon erreur de compilation :
[sedrilo@Sed projet]$ make
gcc -Wall -Werror graphik7.c -lSDL -lSDL_ttf -o graphik7
/usr/bin/ld: cannot find -lSDL_ttf
collect2: ld returned 1 exit status
make: *** [graphik7] Erreur 1
Où est l'erreur? il arrivait à inclure -lSDL, mais -lSDL_ttf ça marche pas, alors que les .h sont dans le même répertoire.
Une idée ?
Merci beaucoup !
Message édité par sedrilo le 31-12-2004 à 02:32:02