Erreur de lien .h (débutant)

Erreur de lien .h (débutant) - C - Programmation

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
Reply

Marsh Posté le 31-12-2004 à 02:30:31   

Reply

Marsh Posté le 31-12-2004 à 04:04:03    

Est-ce que sdl-ttf est instalé sur la machine où tu compiles ?

Reply

Marsh Posté le 31-12-2004 à 12:11:41    

sedrilo a écrit :


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.


 
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 ?


Message édité par Emmanuel Delahaye le 31-12-2004 à 12:12:16

---------------
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 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"  
 
... ?

Reply

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.

Reply

Marsh Posté le 31-12-2004 à 15:26:15    

Ce qui veut dire que j'aurais mal installé ma librairie ?

Reply

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

Reply

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

Reply

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 ?)

Reply

Marsh Posté le 31-12-2004 à 16:46:03    

oui ! 10.0

Reply

Marsh Posté le 31-12-2004 à 16:46:03   

Reply

Marsh Posté le 31-12-2004 à 16:53:43    

Reply

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)

Reply

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 ?

Reply

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 !

Reply

Sujets relatifs:

Leave a Replay

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