PDA

Visualizza la versione completa : [C++/SDL] Non riesco a compilare un programma.


flashare
29-01-2010, 22:09
Ciao a tutti!
Dopo aver studiato l'utilizzo delle classi ed aver cos finito il programma base di C++ ho deciso di iniziare lo studio delle SDL.
Cos, ho realizzato un primo programmino con set video e gestione eventi:



#include <iostream>
#include <cstdlib>
#include <SDL/SDL.h>

using namespace std;

int main()
{
//Inizializzo il subsystem video.
if( SDL_Init(SDL_INIT_VIDEO) < 0 )
{
cout << "Errore nell'inizializzazione del sottosistema video:" << SDL_GetError();
return 1;
}

//Imposto SDL_Quit all'uscita del programma.
atexit(SDL_Quit);

//Creo una superficie.
SDL_Surface *screen;

//Imposto la superficie.
screen = SDL_SetVideoMode(800, 600, 0, SDL_HWSURFACE|SDL_DOUBLEBUF);

if( screen == NULL )
{
cout << "Problemi con il settaggio dello schermo:" << SDL_GetError();
return 1;
}

int fine = 0; //Variabile per il controllo del ciclo.
int full_s = 0; //Variabile per il controllo del fullscreen.
Uint32 flags = SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN;

//Struttura per il controllo degli eventi.
SDL_Event event;

//Inizio il game loop.
while(!fine)
{
//Attendo eventi.
SDL_WaitEvent(&event);

//Imposto la gestione degli eventi che mi interessano.
//In caso di pressione della "X" della finestra.
if( event.type == SDL_QUIT )
fine = 1;

//In caso di pressione tasti sulla tastiera.
if( event.type == SDL_KEYDOWN )
{
//In caso di pressione di "Esc".
if( event.key.keysym.sym == SDLK_ESCAPE )
fine = 1;

//In caso di pressione della barra spaziatrice.
if( event.key.keysym.sym == SDLK_SPACE )
{
if(!full_s)
{
screen = SDL_SetVideoMode(800, 600, 0, flags);
full_s++;
flags = SDL_HWSURFACE|SDL_DOUBLEBUF;
}
else
{
screen = SDL_SetVideoMode(800, 600, 0, flags);
full_s--;
flags = SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN;
}
}
}
}
return 0;
}


Tuttavia, quando provo a compilarlo normalmente con g++ mi da:

SDL_primo.cpp:(.text+0x76): undefined reference to `SDL_Init'
SDL_primo.cpp:(.text+0x82): undefined reference to `SDL_GetError'
SDL_primo.cpp:(.text+0xb7): undefined reference to `SDL_Quit'
SDL_primo.cpp:(.text+0xe0): undefined reference to `SDL_SetVideoMode'
SDL_primo.cpp:(.text+0xee): undefined reference to `SDL_GetError'
SDL_primo.cpp:(.text+0x141): undefined reference to `SDL_WaitEvent'
SDL_primo.cpp:(.text+0x19c): undefined reference to `SDL_SetVideoMode'
SDL_primo.cpp:(.text+0x1cf): undefined reference to `SDL_SetVideoMode'
collect2: ld returned 1 exit status

Se invece provo a compilarlo con "g++ -Wall -O2 SDL_primo.cpp -o SDL_primo 'sdl-config --cflags --libs'" mi da:

g++: sdl-config --cflags --libs: Nessun file o directory

Dov' il problema?!

stirkland
29-01-2010, 22:32
Non so se l'ordine delle opzioni sia importante, cmq dovresti scrivere

SDL_primo.cpp -o SDL_primo

alla fine di tutta la pappardella! E occhio alle

sdl-config --cflags --libs

perch vanno tra apici "storti", dovresti ottenerli con apice+altgr!!

YuYevon
29-01-2010, 22:32
'sdl-config --cflags --libs'


quei due apici devono essere dei backtick (AltGr + ')



`sdl-config --cflags --libs`


Edit: l'ordine delle varie opzioni non importante.

flashare
29-01-2010, 22:57
Funziona!
Grazie mille!

flashare
29-01-2010, 23:09
Un'altra domanda: qual la principale differenza tra la gestione di eventi tramite SDL_WaitEvent e SDL_PollEvent?!

stirkland
29-01-2010, 23:13
Se non sbaglio (e si ke le ho studiate ste cose...) il meccanismo del POLLING (SDL_PollEvent) un continuo controllo per vedere se successo qualcosa..

Invece l'interrupt (SDL_WaitEvent) l'opposto, chi scatena l'evento che informa che qualcosa successo!!

Correggetemi se ho detto vaccate!!

flashare
30-01-2010, 14:03
Quindi qual pi conveniente tra i due?

Loading