La SDL sous Ubuntu Linux

Fermé
yoyo91_19 - 21 oct. 2008 à 20:01
mamiemando Messages postés 33162 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 1 juillet 2024 - 22 oct. 2008 à 12:23
Bonjour,

Je suis sous LInux Ubuntu et j'apprends la programmation C, j'ai donc installé un paquet de la SDL sur mon ordi, j'ai installé libsdl1.2-all ou un truc du genre. J'ai donc maintenant bien toutes les librairies composant la SDL que j'ai placé sous un dossier, mais je n'arrive pas à programmer avec la SDL car mon IDE : Code::Blocks, ne reconnait pas la librairie.

Quand j'ouvre mon projet SDL, il me note :

#ifdef __cplusplus
#include <cstdlib>
#else
#include <stdlib.h>
#endif
#ifdef __APPLE__
#include <SDL/SDL.h>
#else
#include <SDL.h>
#endif

int main ( int argc, char** argv )
{
// initialize SDL video
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "Unable to init SDL: %s\n", SDL_GetError() );
return 1;
}

// make sure SDL cleans up before exit
atexit(SDL_Quit);

// create a new window
SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16,
SDL_HWSURFACE|SDL_DOUBLEBUF);
if ( !screen )
{yoyo91_19
printf("Unable to set 640x480 video: %s\n", SDL_GetError());
return 1;
}

// load an image
SDL_Surface* bmp = SDL_LoadBMP("cb.bmp");
if (!bmp)
{
printf("Unable to load bitmap: %s\n", SDL_GetError());
return 1;
}

// centre the bitmap on screen
SDL_Rect dstrect;
dstrect.x = (screen->w - bmp->w) / 2;
dstrect.y = (screen->h - bmp->h) / 2;

// program main loop
bool done = false;
while (!done)
{
// message processing loop
SDL_Event event;
while (SDL_PollEvent(&event))
{
// check for messages
switch (event.type)
{
// exit if the window is closed
case SDL_QUIT:
done = true;
break;

// check for keypresses
case SDL_KEYDOWN:
{
// exit if ESCAPE is pressed
if (event.key.keysym.sym == SDLK_ESCAPE)
done = true;
break;
}
} // end switch
} // end of message processing

// DRAWING STARTS HERE

// clear screen
SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0));

// draw bitmap
SDL_BlitSurface(bmp, 0, screen, &dstrect);

// DRAWING ENDS HERE

// finally, update the screen :)
SDL_Flip(screen);
} // end main loop

// free loaded bitmap
SDL_FreeSurface(bmp);

// all is well ;)
printf("Exited cleanly\n");
return 0;
}



Il me marque par ailleurs comme message d'erreur : SDL.h : aucun fichier ou dossier de ce type,
et il me le fait pour chaque librairies

comment faire?

merci ^^
A voir également:

1 réponse

mamiemando Messages postés 33162 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 1 juillet 2024 7 760
22 oct. 2008 à 12:23
Au moment où tu compiles, il mentionner
- dans le chemin des includes (option -I de gcc/g++) le répertoire dans lequel sont placés les headers (fichiers .h et .hpp),
- dans les options de linkage le nom de la librairie (option -l, en enlevant l'extension et le préfixe "lib")

Par exemple, si tes headers sont dans /usr/include/SDL et que tu veuilles linker avec /usr/lib/libSDL-1.2.so.0 :
g++ -W -Wall -I/usr/include/ plop.c -lSDL-1.2

Dans ce cas particulier, g++ cherchant automatiquement dans /usr/include, tu peux sous-entendre le -I/usr/include/.
- Le -lSDL-1.2 (et les éventuelles autre libraires) ne servent qu'au moment ou tu crées l'exécutable. En d'autre termes, il ne faut pas le mettre quand tu compiles les modules (fichiers .o), sinon chacun d'eux sera lié à cette librairie et tu auras une définition multiple de symboles.
- Par contre l'option -I/répertoire/des/headers est nécessaire à chaque fois que tu appelles un header qui n'est pas dans un répertoire standard.

Si tu ne t'en sors pas, merci de nous reporter les messages d'erreurs de ton compilateur.

Bonne chance
-1