[Résolu][C] problème de link SDL, SDL_image, SDL_ttf sous cygwin

problème de link SDL, SDL_image, SDL_ttf sous cygwin [Résolu][C] - C - Programmation

Marsh Posté le 24-04-2007 à 21:17:58    

Bonjour,
 
pour rafraichir les quelques bases de C que j'avais appris à l'école (juste des bases et ça fait qques années  :pfff: ) je me suis mis à suivre les tutos de C disponibles sur le site du zero (http://www.siteduzero.com/)
J'en suis maintenant à la partie 2D avec utilisation de la SDL, et là j'ai des soucis de link lors de la compilation.
Evidement, je fait rien comme prévu, paske au lieu des loges de développement qui sont conseillés sur le site, je fais tout sous Cygwin, donc édition des fichiers sous VI et NEDIT, et compilation GCC depuis la console.
 
mon main.c est le suivant:

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <SDL/SDL.h>
  4. int main(int argv, char *argc[])
  5. //int WinMain(int argv, char *argc[])
  6. {
  7.   SDL_Init(SDL_INIT_VIDEO);
  8.   SDL_SetVideoMode(200,200,32,SDL_HWSURFACE);
  9.   SDL_Quit();
  10.   return EXIT_SUCCESS;
  11. }


 
j'ai bien récup le package sur le site de la SDL, copié les .h, .a etc... tout bien ou il faut... et la compilation fonctionne bien si j'utilise les uniquement les fonctions SDL_Init() et SDL_Quit(), mais dès que je commence à vouloir faire qulequechose avec la librairie... ça coince.
 
mon makefile est le suivant:

Code :
  1. CC=gcc
  2. EXE=test01
  3. CFLAGS=-mno-cygwin -I/usr/include
  4. LDFLAGS=-lmingw32 -lSDLmain -lSDL -mwindows -mwinmm -mno-cygwin
  5. all: main.c
  6. $(CC) -c $(CFLAGS) main.c
  7. $(CC) -o $(EXE) $(LDFLAGS) main.o
  8. clean:
  9. rm -rf *.o


 
Comme je l'ai dis juste avant, si je ne fait qu'un SDL_Init et un SDL_Quit, ça passe bien, ça compile, et me créé un exécutable.
Si je fais un objdump -p sur mon exécutable, je vois bien qu'il est linké à SDL.dll qui contient les fonctions:
SDL_GetError
SDL_Init
SDL_Quit
SDL_SetModuleHandle
SDL_strlcat
SDL_strlcpy
 
Par contre, dès que j'essai de faire autre chose, comme ouvrir une fenêtre avec SDL_SetVideoMode par exemple, ça me dis:
"undefined reference to _SDL_SetVideoMode".
 
Voilà, j'avoue être franchement débutant en la matière, et certainement commettre une erreur de newb, mais bon, un petit coup de main serait le bienvenue.
 
Merci d'avance.
PS: j'ai cherché, mais rien trouvé qui ressemble à mon pb sur le forum dans les précédents post du forum.


Message édité par Xav_ le 11-02-2008 à 12:07:09

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 24-04-2007 à 21:17:58   

Reply

Marsh Posté le 25-04-2007 à 09:31:55    

Je ne connais pas du tout SDL, mais ton erreur semble dire que tu n'as pas toutes les bibliothèques nécessaires de liées à ton exécutable (il manque des options -l...).

Reply

Marsh Posté le 25-04-2007 à 09:50:56    

Y'a ptetre une ordre à respecter sur les includes, cf google.


---------------
Töp of the plöp
Reply

Marsh Posté le 25-04-2007 à 09:55:14    

y'a quelques temps j'avais utilisé ça:

Code :
  1. -lmingw32 -lSDLmain -lSDL -mwindows


---------------
Töp of the plöp
Reply

Marsh Posté le 25-04-2007 à 18:32:34    

essaie plutot comme ca dans ton makefile :
 
CFLAGS=`sdl-config --cflags`
LDFLAGS=`sdl-config --libs`

Reply

Marsh Posté le 26-04-2007 à 10:44:36    

merci pour vos réponse, j'étais en déplacement chez un client toute la journée d'hier, donc je n'avais pas pu venir vous lire.
 
je vais faire quelques essai avec vos propositions et vous tiens au courant de ce que ça donne.
 
encore merci d'avoir passé un peu de temps sur mon problème ;)
 
EDIT:

_darkalt3_ a écrit :

y'a quelques temps j'avais utilisé ça:

Code :
  1. -lmingw32 -lSDLmain -lSDL -mwindows



ben en fait si tu regarde mon makefile, tu verra que je l'ai fait ça :(

Ace17 a écrit :

essaie plutot comme ca dans ton makefile :
CFLAGS=`sdl-config --cflags`
LDFLAGS=`sdl-config --libs`


j'ai essayé, et ça change rien à mon pb :(
(pour info les sdl-config m'ont donné les valeurs suivantes):
CFLAGS=-I/usr/local/include/SDL -Dmain=SDL_main -I/usr/include/mingw -DWIN32 -Uunix -mno-cygwin
LDFLAGS=-L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mwindows -mno-cygwin
 
merci quand même pour votre aide.
je pense que tout les -l sont bien présent, mais que par contre il doit y avoir un pb dans mes .a qui sont linkés, et que du coup, ça me donne pas accès à tout ce qu'il faudrait dans ma dll, ou alors ma dll est incomplète...


Message édité par Xav_ le 26-04-2007 à 11:57:04

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 04-02-2008 à 12:02:05    

De retour...
 
Bon, désolé, j'avais oublié de repasser dans le coin, j'avais fini par résoudre mon problème.
Un truc tout bête, en fait dans mon makefile, ça:

Code :
  1. $(CC) -o $(EXE) $(LDFLAGS) main.o

il voulait pas
 
mais ça:

Code :
  1. $(CC) -o $(EXE) main.o $(LDFLAGS)

il était content
 
Je sais, c'est quand même ballot d'etre resté bloqué là-dessus pendant des jours... tout ça parce qu'il veut le .o AVANT le flags dans la ligne  :pfff:  
 
--------------------------------------------
 
Mais bon, voilà, j'ai un new problème (ben vis, si je suis là, vous vous en doutez)
 
Donc j'ai joué quelques temps avec la SDL, puis installeé SDL_Image, là pas vraiement de problème, j'ai récup le package, décompresser, puis dans mon cygwin, j'ai fait le classique:

Code :
  1. ./configure --prefix=/usr/local && make && make install


et ça l'a bien fait assez rapidement (juste eu besoin de rajouter "-lSDL_image" dans mes LDFLAGS, normal quoi)
 
Donc j'ai joué ensuite avec cette extension de la SDL assez facilement.
 
Mais voilà (vous commenciez à vous dire "Mais c'est quoi son problème à la fin !!!" )
j'essai maintenant une autre extension de la SDL, qui est "SDL_ttf"
Et là, impossible d'installer ladite extension :(
SDL_ttf a besoin de freetype, donc j'ai ajouté celà directement via Cygwin (freetype fait partie des librairie dispo sur le site de Cygwin, et donc il se charge de l'installer tout bien comme un grand), et ça c'est OK.
Mais malgré celà, impossible d'installer SDL_ttf.
Durant le ./configure, il dit qu'il trouve bien freetype et SDL dont il a besoin, tout nikel, par contre durant le make qui suit, il me sors une palanquée d'erreur et ne génère pas les .a tant convoités.
 
J'ai fait diverses recherche sur le net, tout ce que je trouve c'est "SDL_ttf sous cygwin, c'est nul...", en résumé ça donne carrément "on sait pas l'installer ni le configurer, alors on dit que c'est de la daube et que ceux qui utilisent ça sont des nazes". Je dis pas que c'est totalement faux, mais j'assume mon choix d'utiliser celà, ma boite m'oblige a avoir un PC sous Windows, c'est un portable avec peu d'espace disque, donc un multiboot est inenvisageable --> donc emuler Unix/Linux avec une conf minimaliste sous windows est ma seule solution.
 
Donc voilà, tout ce que je trouve comme réponse à mon problème, c'est qu'il n'y a pas de solution, et vu ce que j'ai lu, je devrais être heureux déjà de pouvoir utuliser SDL_image sous cygwin, car ça semble être un miracle d'après ce que j'ai pu lire sur divers forum(voir ma remarque juste au-dessus sur mon choix d'architecture).
 
Voilà, le seul début de solution, c'est un forum où un type dis que n'arrivant pas à faire tourner SDL_ttf sous cygwin, il s'est en fait recodé un équivalent, avec les mêmes principes (utiliser freetype pour récupérer une image à partir du texte d'une police), mais il ne file pas de lien pour récupérer son outil, et j'ai peur que mes capacités soient loin de me permettre de re-développer un tel truc par moi-même.
 
Donc si quelqu'un a une idée, je suis prenneur :)
Désolé d'avoir fait long, et merci d'avoir lu jusqu'au bout.


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 11-02-2008 à 12:14:41    

De retour,
Bon ben en fait, l'installation de freetype directement via le système d'installation de Cygwin semble pas trop le faire.
Par contre j'ai récup une archive de freetype2.3.5 sur le site de l'éditeur, j'ai recompiler moi-même à la mimine.
Du coup j'ai pu compliler et installer SDL_ttf
 
Maintenant, mes programmes passe bien la compilation en incluant SDL_ttf.h dans mes programme, et rajoutant -lSDL_ttf en option pour le linker.
Par contre, je dois encore avoir un pti soucis, car dès que je fais un TTF_Init(); dans mon prog, ça le fait planter.
 
Donc j'ai pu réussir la compilation et l'installation de la librairie (c'est pour ça que je marque RESOLU pour le topic), mais par contre, j'ai encore un pti souci quand j'essai de m'en servir... tant pis, je vais continuer de fouiner, mais bon ça à déjà bien avancé.
 
EDIT: bon ben voilà, comme l'install de la librairie, ainsi que la compile de mes progs l'utilisant se passaient bien, j'ai pensé à un problème dans la DLL (les fonctions sont là, mais elles ont un problèmes dans leur code).
Gagné, en récupérant un sdl_ttf.dll windows sur le net, il faisait 170KO (contre 70 pour celui que l'install de base m'avait fourni), et bien nikel, mon programme ne plante plus.
Pour l'instant, je fais juste un TTF_Init() et TTF_Quit(), mais bon, du moment que ça compile et que ça s'éxécute, ça me prouve que la lib est bien disponible, qu'elle est bien trouvée à la compil, et bien Initialisée par le prog quand il tourne :D (que du bon quoi).
Allez j'y retourne, histoire de jouer à afficher mon 1er texte avec cette lib ;)


Message édité par Xav_ le 11-02-2008 à 13:39:35

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Sujets relatifs:

Leave a Replay

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