Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77

    [C++/SDL] Non riesco a compilare un programma.

    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:

    codice:
    #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?!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    220
    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!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    codice:
    'sdl-config --cflags --libs'
    quei due apici devono essere dei backtick (AltGr + ')

    codice:
    `sdl-config --cflags --libs`
    Edit: l'ordine delle varie opzioni non è importante.
    every day above ground is a good one

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77
    Funziona!
    Grazie mille!

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77
    Un'altra domanda: qual è la principale differenza tra la gestione di eventi tramite SDL_WaitEvent e SDL_PollEvent?!

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    220
    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!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77
    Quindi qual è più conveniente tra i due?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.