Salve ho compilato il seguente sorgente fatto con le SDL sotto winxp
trovato in un tutorial che serve a riempire con dei pixel colorati lo schermo:

codice:
#include <stdio.h> 
#include <stdlib.h>
#include <SDL/SDL.h> 

     

void Put_Pixel(SDL_Surface *surface, int x, int y, Uint8 R, Uint8 G, Uint8 B); 
void Draw_Screen(SDL_Surface *screen, int color); 

     

#define DIM_H 800 
#define DIM_V 600 
#define main SDL_main
     

//int main(int argc, char *argv[])
extern C_LINKAGE int SDL_main(int argc, char *argv[]) 
{ 
  // si inizializza il sistema video 
  if( SDL_Init(SDL_INIT_VIDEO) <0 ) 
  { 
    // SDL_GetError() ritorna una descrizione dell'errore 
    printf("Errore init SDL: %s\n", SDL_GetError()); 
    return 1; 
  } 
  
  // all'uscita del programma esegui SDL_Quit per risistemare le cose 
  atexit(SDL_Quit); 
  
  //dichiariamo un puntatore ad una superficie ed un int a 32 bit per i flag necessari 
  SDL_Surface *screen; 
  Uint32 flags; 
  //SDL_VideoInfo da informazioni sulla scheda video 
  const SDL_VideoInfo *info_hw; 
  
  //otteniamo le informazioni sul video 
  info_hw=SDL_GetVideoInfo(); 
  
  //verifichiamo se possiamo creare una superficie hardware, altrimenti software 
  if ( info_hw->hw_available )    
     flags = SDL_HWSURFACE; 
  else 
     flags = SDL_SWSURFACE; 
     
      //aggiungiamo il buffer doppio 
      flags|=SDL_DOUBLEBUF; 
      
      // per rendere disegnabile la Superficie bisogna utilizzare SDL_SetVideoMode 
      if(!( screen = SDL_SetVideoMode(DIM_H, DIM_V, 0,flags) )) 
      { 
        printf("Problemi con il settaggio dello schermo: %s\n", SDL_GetError()); 
        return 1; 
      } 

      //variabile per il ciclo principale 
      int done=0; 
      //indice del colore 0 rosso, 1 verde , 2 blu 
      int color=0; 

      //dichiariamo una struttura SDL_Event 
      SDL_Event event; 

      //game loop, ovvero il loop che viene eseguito finche` non si esce 
      while(!done) 
      { 
        // SDL_WaitEvent attende il prossimo evento 
        SDL_WaitEvent(&event); 

        //premendo la x della finestra col mouse si esce 
        if ( event.type == SDL_QUIT ) 
          done = 1; 

     

        if ( event.type == SDL_KEYDOWN ) 
        { 
        //ma si esce anche premendo Esc 
        if ( event.key.keysym.sym == SDLK_ESCAPE ) 
            done = 1; 

        //premendo la freccia GIU` ci spostiamo al colore precendete 
        if( event.key.keysym.sym == SDLK_DOWN) 
        { 
        //se abbiamo raggiunto l'inizio degli indici torniamo all'ultimo 
        if(!color) 
              color=2; 
            else 
              color--; 
        } 
        //premendo la freccia SU ci spostiamo al prossimo colore 
        if( event.key.keysym.sym == SDLK_UP) 
        { 
        //se abbiamo raggiunto la fine degli indici torniamo a 0 
        if(color==2) 
              color=0; 
            else 
              color++; 
        } 
        //premendo spazio si passa dalla modalita` schermo intero alla modalita` 
        //finestra e viceversa 
        if ( event.key.keysym.sym == SDLK_SPACE ) 
        { 
            flags^=SDL_FULLSCREEN; 
            screen = SDL_SetVideoMode(DIM_H, DIM_V, 0,flags); 
        } 
       } 

      //coloriamo lo schermo 
      Draw_Screen(screen,color); 

      //SDL_Flip disegna il buffer direttamente sullo schermo 
      SDL_Flip(screen); 

     
     } 
     return 0; 
} 

  
  
  
  
  
  
     

//disegna un pixel sullo schermo puntato da screen alle coordinate (x,y) con colori R,G,B 
void Put_Pixel(SDL_Surface *surface, int x, int y,Uint8 R, Uint8 G, Uint8 B) 
{ 
  //restituisce la mappatura di un colore RGB in base ai bpp (alla definizione) 
  Uint32 color = SDL_MapRGB(surface->format, R, G, B); 

  //byte per pixel 
  int bpp = surface->format->BytesPerPixel; 

  //pixel della superficie da colorare 
  Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp; 

  //verifichiamo il numero di byte usati per la nostra superficie 
  switch (bpp) 
  { 
    case 1: // 1 byte =>  8-bpp 
          *p = color; 
    break; 
    case 2: // 2 byte => 16-bpp 
          *(Uint16 *)p = color; 
    break; 
        case 3: // 3 byte => 24-bpp 
             if(SDL_BYTEORDER == SDL_BIG_ENDIAN) 
             { 
               p[0] = (color >> 16) & 0xff; 
               p[1] = (color >> 8) & 0xff; 
               p[2] = color & 0xff; 
             } 
             else 
             { 
               p[0] = color & 0xff; 
               p[1] = (color >> 8) & 0xff; 
               p[2] = (color >> 16) & 0xff; 
             } 
    break; 
    case 4: // 4 byte => 32-bpp 
          *(Uint32 *)p = color; 
    break; 
  } 
} 

     
     

// esegue la colorazione dello schermo 
void Draw_Screen(SDL_Surface *screen, int color) 
{ 
  int l_c[3]={0,0,0}; 
  int col; 
  if(color==0) 
        l_c[0]=1; 
  else if(color==1) 
        l_c[1]=1; 
  else if(color==2) 
        l_c[2]=1; 
     
  //blocchiamo lo schermo se necessario 
      if ( SDL_MUSTLOCK(screen) ) 
        SDL_LockSurface(screen); 

  //disegnamo i pixel sul buffer screen precedentemente creato 
  int y, x;
  for(y=0;y<DIM_V;y++) 
  { 
    for(x=0;x<DIM_H;x++) 
    { 
      col=(x/4)+25; 
      Put_Pixel(screen, x,y,col*l_c[0],col*l_c[1],col*l_c[2]); 
    } 

  } 

  //sblocchiamo lo schermo se necessario 
  if ( SDL_MUSTLOCK(screen) ) 
        SDL_UnlockSurface(screen); 
}


Utilizzo DEVc++ per compilare e dopo aver inserito i seguenti parametri di linking:

codice:
 -lmingw32-gcc  
            -lsdlmain  
            -lsdl

compilo ed ottengo:

codice:
Compiler: Default compiler
Building Makefile: "C:\Documents and Settings\admin\Desktop\Tetris\Makefile.win"
Executing  make...
make.exe -f "C:\Documents and Settings\admin\Desktop\Tetris\Makefile.win" all
mingw32-gcc.exe main.o  -o "Tetris.exe" -L"C:/Dev-Cpp/lib" -lmingw32-gcc  -lsdlmain  -lsdl   

C:\Dev-Cpp\Bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lmingw32-gcc
collect2: ld returned 1 exit status

make.exe: *** [Tetris.exe] Error 1

Execution terminated
Non capisco quindi perche' mi dia di nuovo tali problemi e dove possa aver sbagliato.
Sono nuovo delle SDL e sto' cercando un tutorial piu' di base che mi spieghi i dettagli
che mi servono ma e' difficile trovarlo in italiano.
Nessuno mi puo' dare una mano a capire perche' continua a darmi errori di linking?