SDL : linker error

bigben89 Messages postés 6 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 21 mars 2006 - 18 avril 2005 à 23:47
bigben89 Messages postés 6 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 21 mars 2006 - 21 mars 2006 à 23:51
Ca fais à peine quelques mois que j'fais de la programmation (en C) et j'aimerais

faire un peu de 2d et de 3d avec SDL.

Je regarde des tutoriaux sur SDL, j'essaye de compiler un programme donné en

exemple et il me met :



linker error : undefined reference to 'SDL_MapRGB'

linker error : undefined reference to 'SDL_FillRect'

...

linker error : undefined reference to 'SDL_FreeSurface'

linker error : undefined reference to 'WinMain@16'



C'est quoi le blème : problème avec les librairies, ou autre chose ??!!

Ca m'énerve



Programme :



#include <SDL/SDL.h>

#include <stdio.h>

#include <stdlib.h>



// Surfaces et rectangle

SDL_Rect rect;

SDL_Surface *Screen, *rectangle;



// Fonction d'affichage

void affichage()

{

// Coloration des surfaces

SDL_FillRect(rectangle, NULL,

SDL_MapRGB(Screen->format, 255, 0, 0));

SDL_FillRect(Screen, NULL, 0);



// Définition de la zone à l'écran

rect.x = (Screen->w / 2) - (rect.w / 2);

rect.y = (Screen->h / 2) - (rect.h / 2);

rect.w = Screen->w / 2;

rect.h = Screen->h / 2;



// Blit de la surface à l'écran et affichage

SDL_BlitSurface(rectangle,NULL,Screen,&rect);

SDL_Flip(Screen);

}



int main (int argc, char **argv)

{

// Initialisation de SDL

if (SDL_Init (SDL_INIT_VIDEO) < 0) {

fprintf (stderr, "Erreur d'initialisation de SDL: %s\n",

SDL_GetError ());

return 1;

}

atexit (SDL_Quit); // Pour quitter proprement



// Initialisation de SDL_Video

Screen = SDL_SetVideoMode (640, 480, 16, SDL_SWSURFACE|

SDL_DOUBLEBUF);

if (Screen == NULL) {

fprintf (stderr, "Erreur d'init du mode video: %s\n",

SDL_GetError ());

return 2;

}



// Allocation de la surface (pour l'instant vide)

rectangle = SDL_CreateRGBSurface(SDL_SWSURFACE,

320, 240, 32,

0, 0, 0, 0);



// Titre de fenêtre

SDL_WM_SetCaption ("Première appli SDL", NULL);



// Boucle infinie

while (/*true*/1)

{

SDL_Event event; // Fermer la fenêtre proprement

if (SDL_PollEvent (&event) && event.type==SDL_QUIT)

break;

affichage(); // Mise à jour de l'écran

}



// Libération de la surface rectangle

SDL_FreeSurface(rectangle);

return 0;

}

11 réponses

mad_love_disease Messages postés 64 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 1 juillet 2010 3
19 avril 2005 à 00:37
le linker fait le lien entre ton code cpp et la library SDL. Toutes les fonctions de la SDL que tu utilises sont précompilées dans cette derniere library. Le linker te fais des erreurs car tu n'as pas renseigner le compilo sur les library; pour cela, il faut que tu donnes le chemin de la library au compilo:

Sous visual: project->settings (ou ALT F7) onglets link.
Sous dev cpp: ALT P ou options du projets.

cherche un fichier du style libSDL.lib, enfin un point lib ou un .a, et link le.

Ca devrait fonctionner.

Mad_Love_Disease
0
bigben89 Messages postés 6 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 21 mars 2006
19 avril 2005 à 14:53
Ca marche déja mieux :



J'ai plus les "undefined reference to 'SDL..."

Problème : il me raffiche

[linker error] : undefined reference to 'WinMain@16'

[build error] [programme.exe] Error 1
0
mad_love_disease Messages postés 64 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 1 juillet 2010 3
19 avril 2005 à 15:08
euh, et bien la, on a affaire à un probleme d'adresse... J'ai deux questions pour toi:
Quelle compilo utilises tu?
Est ce un .lib ou un .a que tu as utilisé??

Mad_Love_Disease
0
bigben89 Messages postés 6 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 21 mars 2006
19 avril 2005 à 21:53
Ben, j'utilise Dev C++, et j'ai créé un projet auquel j'ai lié SDL.lib
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mad_love_disease Messages postés 64 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 1 juillet 2010 3
20 avril 2005 à 02:55
et bien le probleme vient de la ;-(
En effet les library .lib sont normalisés pour Visual C++ (et oui, c la ...)


Il te faut la library en .a


Pour cela, deux solutions:


soit tu la trouves sur le net ( par ex: http://www.libsdl.org/release/SDL-devel-1.2.8-mingw32.tar.gz)
regardes dans le dossier lib


soit tu utilises l'utilitaire reimp, qui a été fait pour. Il transforme les .lib en .a
Il se trouve dans les tools de MinGW


voila, j'espere que cela va t'aider!!

Mad_Love_Disease
0
bigben89 Messages postés 6 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 21 mars 2006
20 avril 2005 à 15:30
J'ai lié le fichier "libSDL.a" au programme, maintenant il m'affiche des tonnes d'erreurs :

Presque une bonne centaine de [linker error] undefined reference to ... !!!

D'accord, c'est pas les mêmes qu'avant, mais c'est génant quand même !

Je commence tout juste à vouloir faire de la SDL et ca arrête pas de déconner

Ca me gave !
0
mad_love_disease Messages postés 64 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 1 juillet 2010 3
20 avril 2005 à 16:06
mince, ca ne doit pas etre la bonne lib que je t'ais filé.
Tente la seconde solution, a savoir utilisé reimp pour convertir ton ancienne lib SDL.lib en SDL.a. telecharge le fichier:
http://heanet.dl.sourceforge.net/sourceforge/mingw/mingw-utils-0.3.tar.gz

dans le dossier bin il y a reimp.exe

sous une console windows tape reimp.exe SDL.lib
et pis il te fera le bon SDL.a

j'espere que cela va fonctionner

Mad_Love_Disease
0
bigben89 Messages postés 6 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 21 mars 2006
20 avril 2005 à 17:15
Nouveau problème !

Dans l'invité de commandes, je tape : reimp.exe SDL.lib

Résultat : reimp.exe : dlltool: No such file or directory
0
mad_love_disease Messages postés 64 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 1 juillet 2010 3
30 avril 2005 à 14:31
yo, desolé pour l'oubli


alors, tu dezippe tout le zip que je t'ai filler et SDL.lib dans C:
tu vas dans l'invite de commandes et tu tapes: reimp.exe SDL.lib


normalement ca tu l'as deja fait, si ca ne marche pas, tu m'envoie SDL.lib à mon adresse mail [mailto:mad_love_disease@hotmail.com mad_love_disease@hotmail.com] et je te ferais ca,


desolé pour le retard......

Mad_Love_Disease
0
Darkvlador Messages postés 19 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 29 octobre 2006
21 mars 2006 à 20:02
salut !!!

il te faut le libmingw32 et libSDL dans le dossier lib de DEV C++
0
bigben89 Messages postés 6 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 21 mars 2006
21 mars 2006 à 23:51
lol !!!
J'l'avais completement oublié ce post !
Depuis le temps, c'est bon, j'ai qd même réussi à faire marcher SDL : je m'y suis remis un petit coup en février en regardant un tuto et ca avait marché correctement (si ce n'est qu'il marche très bien sur mon PC, mais qu'il n'a pas marché sur les 2 autres PC sur lesquels je l'ai essayé)
0
Rejoignez-nous