SDL : linker error

Signaler
Messages postés
6
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
21 mars 2006
-
Messages postés
6
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
21 mars 2006
-
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

Messages postés
64
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 juillet 2010
2
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
Messages postés
6
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
21 mars 2006

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
Messages postés
64
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 juillet 2010
2
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
Messages postés
6
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
21 mars 2006

Ben, j'utilise Dev C++, et j'ai créé un projet auquel j'ai lié SDL.lib
Messages postés
64
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 juillet 2010
2
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
Messages postés
6
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
21 mars 2006

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 !
Messages postés
64
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 juillet 2010
2
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
Messages postés
6
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
21 mars 2006

Nouveau problème !

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

Résultat : reimp.exe : dlltool: No such file or directory
Messages postés
64
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 juillet 2010
2
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
Messages postés
19
Date d'inscription
mercredi 30 novembre 2005
Statut
Membre
Dernière intervention
29 octobre 2006

salut !!!

il te faut le libmingw32 et libSDL dans le dossier lib de DEV C++
Messages postés
6
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
21 mars 2006

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