Partage
  • Partager sur Facebook
  • Partager sur Twitter

Passage à SDL impossible !

Code::Blocks, c'est parfois de la daube..

Sujet résolu
    12 octobre 2008 à 3:43:43

    Salut à tous. :)

    J'ai fini le théorique du C, et j'ai décidé de me mettre à SDL.
    Je télécharge donc la librairie que j'extrait dans CodeBlocks, dans un dossier qui s'appelle "SDL-1.2.13".
    Je m'assure que tous les .h sont dans le fichier include.
    Je lance code blocks et je vais dans nouveau projet SDL.
    Je saute la fenêtre de présentation du wizard, je donne le nom sdl à mon projet, j'indique le dossier contenant la lib ("SDL-1.2.13"), je valide, je passe l'étape suivante décrite comme sans intérêt par M@teo et le projet est créé.

    Oui mais voilà, le fichier main.c n'est pas créé, à la place j'ai main.cpp (qui est un fichier C++) !

    #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 )
        {
            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;
    }
    


    N'étant pas un abruti fini, je me dis c'est pas grave, je copie le DLL dans le dossier, je compile et là, premier bug :

    Citation

    ld.exe||cannot find -lSDL.dll


    -lSDL.dll ? C'est quoi au juste ?


    Je me dis que c'est du au fait que main soit en C++, donc je le renomme en .c, et je remplace "compiler variable" (dans les propriétés de main.c(cp) qui est défini CCP en CC, et là autre erreur :

    Citation

    F:\Program Files\CodeBlocks\Projets\sdl\main.c|47|error: `bool' undeclared (first use in this function)
    F:\Program Files\CodeBlocks\Projets\sdl\main.c|47|error: (Each undeclared identifier is reported only once for each function it appears in.)
    F:\Program Files\CodeBlocks\Projets\sdl\main.c|47|error: syntax error before "done"
    F:\Program Files\CodeBlocks\Projets\sdl\main.c|48|error: `done' undeclared (first use in this function)
    F:\Program Files\CodeBlocks\Projets\sdl\main.c|59|error: `true' undeclared (first use in this function)



    Shit, le complier C ne connaît pas les booléens, ni true, ni false d'ailleurs...

    Bon, alors je remplace bool par int, des true par des 1 et les false par des 0, et je recompile :

    Citation

    ld.exe||cannot find -lSDL.dll


    -lSDL.dll ? C'est quoi au juste ?


    Voilà, j'ai fait un magnifique cercle...

    Quelqu'un peut m'expliquer où est-ce que j'ai fait une connerie ?

    Merci. :)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      12 octobre 2008 à 8:07:47

      Moi je vient de créé un nouveau fichier SDL sur code block et je n'ai pas d'erreur de compilation.

      Il peut y avoir plusieurs erreurs:

      Il peut y avoir une erreur dans ton code:
      #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 )
          {
              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 peut manquer des .dll dans ton dossier projet.

      Ou peut-être tu as mal installer le SDL.

      a+ bonne recherche ^^


      • Partager sur Facebook
      • Partager sur Twitter
        12 octobre 2008 à 9:04:42

        @Ned77 aucun rapport...

        @PO Le problème ne vient pas du code, c'est le linker qui ne veut pas faire son boulot, et il te dit qu'il ne trouve pas -lSDL.dll, ce qui veut dire que tu essayes de lier statiquement une bibliothèque dynamique... Donc tu retournes dans la configuration de ton linker et asssure toi de n'avoir QUE

        -lSDL
        -lSDLmain

        Citation : Pas de titre

        Shit, le complier C ne connaît pas les booléens, ni true, ni false d'ailleurs...


        Rien de surprenant, le type bool ne fait pas partit du langage C, cependant si tu veux vraiment t'en servir en C, tu peux inclure stdbool.h.


        • Partager sur Facebook
        • Partager sur Twitter
          12 octobre 2008 à 13:31:59

          Citation : Pas de titre

          Code::Blocks, c'est parfois de la daube..


          Comme toujours, quand on ne sait pas utiliser un outil, c'est que l'outil est mauvais...
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            12 octobre 2008 à 13:50:19

            A tu bien pensé a mettre le fichier SDL.dll dans le projet que tu as créé...

            Moi ça me crée un fichier main.cpp aussi et tout fonctionne...
            • Partager sur Facebook
            • Partager sur Twitter
              12 octobre 2008 à 17:36:49

              Citation : knatown

              A tu bien pensé a mettre le fichier SDL.dll dans le projet que tu as créé...

              Moi ça me crée un fichier main.cpp aussi et tout fonctionne...



              Citation : Neoterranos

              N'étant pas un abruti fini, je me dis c'est pas grave, je copie le DLL dans le dossier, je compile et là, premier bug :



              Citation : -ed-

              Citation : Pas de titre

              Code::Blocks, c'est parfois de la daube..


              Comme toujours, quand on ne sait pas utiliser un outil, c'est que l'outil est mauvais...



              Jusqu'à preuve du contraire, en suivant le tuto à a lettre, et en tentant moi-même de faire des trucs, je me fais refouler, alors oui, Code::Blocks a un peu du mal... Depuis quand le fichier s'appelle -lSDL ?
              Mais bien sûr pour quelqu'un comme toi qui a quelques années de C/C++ derrière toi, c'est facile à dire ça.

              Citation : noob4ever

              @PO Le problème ne vient pas du code, c'est le linker qui ne veut pas faire son boulot, et il te dit qu'il ne trouve pas -lSDL.dll, ce qui veut dire que tu essayes de lier statiquement une bibliothèque dynamique... Donc tu retournes dans la configuration de ton linker et asssure toi de n'avoir QUE

              -lSDL
              -lSDLmain


              Mes fichiers ne s'appellent pas -lSDL et -lSDLmain, donc déjà on est pas mal fichus si je dois avoir ça...

              Citation : noob4ever

              Citation : Pas de titre

              Shit, le complier C ne connaît pas les booléens, ni true, ni false d'ailleurs...


              Rien de surprenant, le type bool ne fait pas partit du langage C, cependant si tu veux vraiment t'en servir en C, tu peux inclure stdbool.h.


              Nan, je m'en fiche des booléens, je sais remplacer bool par int et true par 1 et false par 0...

              Ma question est simple, pourquoi il cherche -lSDL.dll et pas SDL.dll ??
              • Partager sur Facebook
              • Partager sur Twitter
                12 octobre 2008 à 17:47:09

                Citation : Neoterranos

                Depuis quand le fichier s'appelle -lSDL ?


                Personne n'a dit que le fichier devait s'appeler -lSDL.

                Une fois de plus, avant de critiquer, il faut savoir de quoi on parle. Si tu avais lu la doc de ton compilateur, tu saurais que l'option -l indique à l'éditeur de lien qu'il doit lier une bibliothèque avec l'application.

                Le nom réel de la bibliothèque doit être lib<nom>.a. La commande est alors -l<nom>.

                Par exemple, pour lier la bibliothèque libSDL.a, il faut passer la commande -lSDL.

                Inversement, la commande -lSDLmain signifie qu'il faut lier la bibliothèque libSDLmain.a.

                Quand on est débutant, on se contente de poser des questions, et surtout, on évite de porter des jugements. Simple question de bon sens (ben oui, on a pas les éléments pour juger...)
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                  12 octobre 2008 à 17:49:42

                  Alors pourquoi le fichier SDL.dll qui est dans mon projet est "introuvable" ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 octobre 2008 à 17:52:07

                    Citation : Pas de titre

                    Jusqu'à preuve du contraire, en suivant le tuto à a lettre, et en tentant moi-même de faire des trucs, je me fais refouler, alors oui, Code::Blocks a un peu du mal...


                    C'est pas codeblocks qui a un peu de mal c'est toi.

                    Citation : Neoterranos

                    Alors pourquoi le fichier SDL.dll qui est dans mon projet est "introuvable" ?


                    Parce que tu essayes de lier statiquement une bibliothèque dynamique, personne ne ta dit de faire -lSDL.dll, lors de l'exécution, l'exécutable ira directement chercher les implémentations dans la dll qui doit être dans le dossier courant.

                    Bref ce n'est vraiment pas compliqué, tu mets SDL.dll à coté de l'exe, tu vas configurer ton linker de sorte à lier statiquement libSDL.a et libSDLmain.a. ( -lSDL et -lSDLmain ).
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 octobre 2008 à 17:57:34

                      Citation : Neoterranos

                      Alors pourquoi le fichier SDL.dll qui est dans mon projet est "introuvable" ?


                      Tu donnes l'impression de tout savoir et si ça ne fonctionne pas, c'est parce que les outils sont mauvais. Je te rappelle que tu es débutant et que visiblement, tu as encore beaucoup de choses à apprendre. Alors un peu plus d'humilité dans le propos ne ferais pas de mal...

                      1 - Ce fichier (SDL.dll) n'a rien à faire dans ton projet.
                      2 - [Windows} Il doit être accessible par une application en cours d'exécution. C'est à dire

                      - soit dans /WINDOWS/SYS,
                      - soit dans /WINDOWS/SYS32,
                      - soit dans le répertoire d'exécution du programme.

                      Je te conseille un peu de lecture :

                      http://mapage.noos.fr/emdel/notes.htm#production
                      http://mapage.noos.fr/emdel/notes.htm#bibliotheque
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Music only !
                        12 octobre 2008 à 17:59:52

                        Citation : noob4ever

                        Citation : Pas de titre

                        Jusqu'à preuve du contraire, en suivant le tuto à a lettre, et en tentant moi-même de faire des trucs, je me fais refouler, alors oui, Code::Blocks a un peu du mal...


                        C'est pas codeblocks qui a un peu de mal c'est toi.


                        J'ai rien fait. o_O

                        Citation : noob4ever

                        Citation : Neoterranos

                        Alors pourquoi le fichier SDL.dll qui est dans mon projet est "introuvable" ?


                        Parce que tu essayes de lier statiquement une bibliothèque dynamique, personne ne ta dit de faire -lSDL.dll, lors de l'exécution, l'exécutable ira directement chercher les implémentations dans la dll qui doit être dans le dossier courant.

                        Bref ce n'est vraiment pas compliqué, tu mets SDL.dll à coté de l'exe, tu vas configurer ton linker de sorte à lier statiquement libSDL.a et libSDLmain.a. ( -lSDL et -lSDLmain ).


                        Je lui ai rien demandé, j'ai laissé les configs de base, et il tente une liaison dynamique...
                        Et je le configure où le linker ? Parce que je trouve pas...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 octobre 2008 à 18:02:20

                          Citation : Neoterranos

                          Et je le configure où le linker ? Parce que je trouve pas...


                          Settings > Compiler ...> Linker Setings

                          C'était super dur à trouver...
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            12 octobre 2008 à 18:05:12

                            Non, pas dur, j'y suis déjà allé, et j'y suis pas resté... Parce que c'est bien vide...

                            Image utilisateur
                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 octobre 2008 à 18:08:46

                              Project -> build options -> Linker settings

                              et clique bien sur le mode debug, car il est possible qu'il ne t'affiche rien si aucun mode n'est sélectionné.
                              Et je te rappelle ce qu'il faut faire, linker les 2 bibliothèques SDL (tu tapes -lSDL et -lSDLmain ) et tu ne tapes PAS SDL.dll où que ce soit, cette dll n'a rien à faire dans ton projet, il faut juste que tu la places à coté de l'executable.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 octobre 2008 à 18:14:02

                                J'ai pas trouvé où je devais taper -lSDL et -lSDLmain, par contre, j'ai mis les liens vers les librairies là où on me proposait de le faire et rebelote...

                                Citation

                                ld.exe||cannot find -lSDL.dll|


                                Mais il vient d'où ce -lSDL.dll ? Je lui ai jamais demandé de le faire !
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  12 octobre 2008 à 18:19:26

                                  Citation : Neoterranos

                                  J'ai pas trouvé où je devais taper -lSDL et -lSDLmain,


                                  Soit tu mets SDL et SDL_main dans la colonne de gauche (préférable)
                                  Soit tu mets -lSDL et -lSDLmain dans la colonne de droite.

                                  Citation : Pas de titre


                                  par contre, j'ai mis les liens vers les librairies là où on me proposait de le faire et rebelote...

                                  Citation

                                  ld.exe||cannot find -lSDL.dll|


                                  Mais il vient d'où ce -lSDL.dll ? Je lui ai jamais demandé de le faire !


                                  Montre la configuration de ton projet :

                                  Sur le projet (en gras à gauche) :

                                  Click-droit > debug > Linker Settings.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Music only !
                                    12 octobre 2008 à 18:32:10

                                    Ok je vois, déjà écoute bien ce que dit -ed- je le cite :

                                    Citation : Pas de titre

                                    Soit tu mets SDL et SDL_main dans la colonne de gauche (préférable)
                                    Soit tu mets -lSDL et -lSDLmain dans la colonne de droite.



                                    Et toi tu as utilisé les 2 colonnes pour faire la même chose, hum !

                                    Ensuite, quel est le type de ton projet ? Car si tu as utilisé le template SDL je suspecte que ça vienne de là, en effet il est possible qu'il ait mit SDL.dll dans la config du linker, rien ne vaut un bon projet vide configuré manuellement.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      12 octobre 2008 à 18:32:54

                                      Citation : Neoterranos

                                      Voilà :

                                      Image utilisateur


                                      Retire ce qu'il y a dans la colonne de gauche, c'est faux.

                                      Ensuite, recommence (ctrl-f11) et fait un copié collé du contenu de la fenêtre de compilation (build log) : click droit > select all > click-droit > copy etc.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Music only !
                                        12 octobre 2008 à 18:35:20

                                        Citation : noob4ever

                                        Citation : Pas de titre

                                        Soit tu mets SDL et SDL_main dans la colonne de gauche (préférable)
                                        Soit tu mets -lSDL et -lSDLmain dans la colonne de droite.


                                        J'ai déjà essayé les deux séparés, donc j'ai essayé les deux ensemble.

                                        Citation : -ed-

                                        Citation : Neoterranos

                                        Voilà :

                                        Image utilisateur


                                        Retire ce qu'il y a dans la colonne de gauche, c'est faux.


                                        Pourquoi c'est faux ?
                                        (J'ai retiré)

                                        Citation : -ed-

                                        Ensuite, recommence (ctrl-f11) et fait un copié collé du contenu de la fenêtre de compilation (build log) : click droit > select all > click-droit > copy etc.



                                        Citation : Pas de titre


                                        -------------- Build: Debug in testsdl ---------------

                                        Compiling: main.cpp
                                        Linking console executable: bin\Debug\testsdl.exe
                                        F:\Program Files\CodeBlocks\MinGW\bin\ld.exe: cannot find -lSDL.dll
                                        collect2: ld returned 1 exit status
                                        Process terminated with status 1 (0 minutes, 0 seconds)
                                        1 errors, 0 warnings

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          12 octobre 2008 à 21:13:38

                                          Citation : Neoterranos

                                          <citation rid="3046377"><citation rid="3046342">Voilà :
                                          Pourquoi c'est faux ?
                                          (J'ai retiré)


                                          Parce que tu parles de .lib à gcc qui ne comprends que les .a...

                                          Citation : Pas de titre


                                          -------------- Build: Debug in testsdl ---------------

                                          Compiling: main.cpp
                                          Linking console executable: bin\Debug\testsdl.exe
                                          F:\Program Files\CodeBlocks\MinGW\bin\ld.exe: cannot find -lSDL.dll
                                          collect2: ld returned 1 exit status
                                          Process terminated with status 1 (0 minutes, 0 seconds)
                                          1 errors, 0 warnings


                                          Déjà, tu compiles en C++, c'est pas normal. renomme ton fichier main.cpp en main.c.

                                          J'avoue ne pas comprendre pourquoi il cherche SDL.dll...
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Music only !
                                            12 octobre 2008 à 22:06:44

                                            Citation : -ed-

                                            Citation : Neoterranos

                                            <citation rid="3046377"><citation rid="3046342">Voilà :
                                            Pourquoi c'est faux ?
                                            (J'ai retiré)


                                            Parce que tu parles de .lib à gcc qui ne comprends que les .a...


                                            Donc je peux rien faire, je n'ai que des .lib.


                                            Citation : -ed-

                                            Citation : Pas de titre


                                            -------------- Build: Debug in testsdl ---------------

                                            Compiling: main.cpp
                                            Linking console executable: bin\Debug\testsdl.exe
                                            F:\Program Files\CodeBlocks\MinGW\bin\ld.exe: cannot find -lSDL.dll
                                            collect2: ld returned 1 exit status
                                            Process terminated with status 1 (0 minutes, 0 seconds)
                                            1 errors, 0 warnings


                                            Déjà, tu compiles en C++, c'est pas normal. renomme ton fichier main.cpp en main.c.

                                            J'avoue ne pas comprendre pourquoi il cherche SDL.dll...


                                            Apparemment, C ou C++ ça ne change rien, mais même en main.c, ça me fait pareil...
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              12 octobre 2008 à 22:18:44

                                              Citation : Neoterranos

                                              Donc je peux rien faire, je n'ai que des .lib.


                                              Les .lib sont utilisés par Visual C++. Tu n'as pas téléchargé la bonne version de la SDL. Télécharge la version mingw32, et non VC6 ou VC8.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                12 octobre 2008 à 22:21:47

                                                Citation : flyinglamer

                                                Citation : Neoterranos

                                                Donc je peux rien faire, je n'ai que des .lib.


                                                Les .lib sont utilisés par Visual C++. Tu n'as pas téléchargé la bonne version de la SDL. Télécharge la version mingw32, et non VC6 ou VC8.


                                                Merde...
                                                Tu as raison, je croyais avoir pris minGW, et en allant regarder dans mon dossier de téléchargement, je vois VC8.

                                                Merci à toi, et désolé à -ed- et noob4ever à qui j'ai fait perdre du temps inutilement.

                                                Neoterranos

                                                P.S. : Ça m'apprendra à parler trop vite.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  13 octobre 2008 à 8:34:21

                                                  Salut,

                                                  Citation : -ed-


                                                  Déjà, tu compiles en C++, c'est pas normal. renomme ton fichier main.cpp en main.c.
                                                  J'avoue ne pas comprendre pourquoi il cherche SDL.dll...



                                                  Moi qui débute aussi en codeblock - SDL, j'avoue ne pas comprendre non plus... Quand on crée un projet SDL avec le wizard, on n'a apparemment pas la possibilité d'indiquer "C", et "C++" semble donc sélectionné "arbitrairement". Un main.cpp est même créé, il crée lui même une fenêtre graphique SDL. Quand on essaie de renommer ".cpp" en ".c" et qu'on remplace le nom du main dans le projet, ça ne compile pas, on est vraiment avec un compilo c++. Las d'éplucher des docs, j'ai abdiqué et continué à faire du C avec un compilo C++...

                                                  A+

                                                  Pfeuh
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    13 octobre 2008 à 11:43:03

                                                    Citation : pfeuh

                                                    Moi qui débute aussi en codeblock - SDL, j'avoue ne pas comprendre non plus... Quand on crée un projet SDL avec le wizard,


                                                    Le wizard en question est en fait un script :
                                                    ////////////////////////////////////////////////////////////////////////////////
                                                    //
                                                    // SDL project wizard
                                                    //
                                                    ////////////////////////////////////////////////////////////////////////////////
                                                    
                                                    // globals (used under windows only)
                                                    SDLPathDefault    <- _T("$(#sdl)");
                                                    SDLPathDefaultInc <- _T("$(#sdl.include)");
                                                    SDLPathDefaultLib <- _T("$(#sdl.lib)");
                                                    SDLPath           <- _T("");
                                                    
                                                    function BeginWizard()
                                                    {
                                                        local intro_msg = _T("Welcome to the new SDL project wizard!\n\n" +
                                                                             "This wizard will guide you to create a new project\n" +
                                                                             "using the SDL graphics library.\n\n" +
                                                                             "When you 're ready to proceed, please click \"Next\"...");
                                                    
                                                        local sdlpath_descr = _T("Please select the location of SDL on your computer.\n" +
                                                                                 "This is the top-level folder where SDL was installed (unpacked).\n" +
                                                                                 "To help you, this folder must contain the subfolders\n" +
                                                                                 "\"include\" and \"lib\".");
                                                    
                                                        Wizard.AddInfoPage(_T("SDLIntro"), intro_msg);
                                                        Wizard.AddProjectPathPage();
                                                        if (PLATFORM == PLATFORM_MSW)
                                                            Wizard.AddGenericSelectPathPage(_T("SDLPath"), sdlpath_descr, _T("Please select SDL's location:"), SDLPathDefault);
                                                        Wizard.AddCompilerPage(_T(""), _T("*"), true, true);
                                                    }
                                                    
                                                    ////////////////////////////////////////////////////////////////////////////////
                                                    // SDL's path page
                                                    ////////////////////////////////////////////////////////////////////////////////
                                                    
                                                    function OnLeave_SDLPath(fwd)
                                                    {
                                                        if (fwd)
                                                        {
                                                            local dir         = Wizard.GetTextControlValue(_T("txtFolder")); // txtFolder is the text control in GenericSelectPathPage
                                                            local dir_nomacro = VerifyDirectory(dir);
                                                    
                                                            if (dir_nomacro.IsEmpty())
                                                                return false;
                                                    
                                                            // verify include dependencies
                                                            local dir_nomacro_inc = GetCompilerIncludeDir(dir, SDLPathDefault, SDLPathDefaultInc);
                                                            if (dir_nomacro_inc.IsEmpty())
                                                                return false;
                                                            if (!VerifyFile(dir_nomacro_inc, _T("SDL.h"), _T("SDL's include")))
                                                                return false;
                                                    
                                                            // verify library dependencies
                                                            local dir_nomacro_lib = GetCompilerLibDir(dir, SDLPathDefault, SDLPathDefaultLib);
                                                            if (dir_nomacro_lib.IsEmpty())
                                                                return false;
                                                    
                                                            if (!VerifyLibFile(dir_nomacro_lib, _T("SDLmain"), _T("SDL's")))
                                                                return false;
                                                    
                                                            if (!VerifyLibFile(dir_nomacro_lib, _T("SDL.dll"), _T("SDL's")))
                                                                return false;
                                                    
                                                            SDLPath = dir; // Remember the original selection.
                                                    
                                                            local is_macro = _T("");
                                                    
                                                            // try to resolve the include directory as macro
                                                            is_macro = GetCompilerIncludeMacro(dir, SDLPathDefault, SDLPathDefaultInc);
                                                            if (is_macro.IsEmpty())
                                                            {
                                                                // not possible -> use the real inc path we had computed instead
                                                                SDLPathDefaultInc = dir_nomacro_inc;
                                                            }
                                                    
                                                            // try to resolve the library directory as macro
                                                            is_macro = GetCompilerLibMacro(dir, SDLPathDefault, SDLPathDefaultLib);
                                                            if (is_macro.IsEmpty())
                                                            {
                                                                // not possible -> use the real lib path we had computed instead
                                                                SDLPathDefaultLib = dir_nomacro_lib;
                                                            }
                                                        }
                                                        return true;
                                                    }
                                                    
                                                    // return the files this project contains
                                                    function GetFilesDir()
                                                    {
                                                        return _T("sdl/files");
                                                    }
                                                    
                                                    // setup the already created project
                                                    function SetupProject(project)
                                                    {
                                                        if (PLATFORM == PLATFORM_MSW)
                                                        {
                                                            project.AddIncludeDir(SDLPathDefaultInc);
                                                            project.AddLibDir(SDLPathDefaultLib);
                                                    
                                                            // add link libraries
                                                            project.AddLinkLib(_T("mingw32"));
                                                            project.AddLinkLib(_T("SDLmain"));
                                                            project.AddLinkLib(_T("SDL.dll"));
                                                            project.AddLinkLib(_T("user32"));
                                                            project.AddLinkLib(_T("gdi32"));
                                                            project.AddLinkLib(_T("winmm"));
                                                            project.AddLinkLib(_T("dxguid"));
                                                        }
                                                        else if (PLATFORM == PLATFORM_MAC)
                                                        {
                                                            //project.AddCompilerOption(_T("-D_GNU_SOURCE=1 -D_THREAD_SAFE"));
                                                            project.AddLinkerOption(_T("-framework SDL"));
                                                            // libSDLmain.a does not exist by default, needs to be built from SDLMain.m:
                                                            project.AddLinkLib(_T("SDLmain"));
                                                    
                                                            project.AddLinkerOption(_T("-framework Cocoa")); // SDL dependency
                                                        }
                                                        else
                                                        {
                                                            // unix way
                                                            project.AddCompilerOption(_T("`sdl-config --cflags`"));
                                                            project.AddLinkerOption(_T("`sdl-config --libs`"));
                                                        }
                                                    
                                                        // enable compiler warnings (project-wide)
                                                        WarningsOn(project, Wizard.GetCompilerID());
                                                    
                                                        // Debug
                                                        local target = project.GetBuildTarget(Wizard.GetDebugName());
                                                        if (!IsNull(target))
                                                        {
                                                            target.SetTargetType(ttConsoleOnly); // ttConsoleOnly: console for debugging
                                                            target.SetOutputFilename(Wizard.GetDebugOutputDir() + Wizard.GetProjectName() + DOT_EXT_EXECUTABLE);
                                                            // enable generation of debugging symbols for target
                                                            DebugSymbolsOn(target, Wizard.GetCompilerID());
                                                        }
                                                    
                                                        // Release
                                                        target = project.GetBuildTarget(Wizard.GetReleaseName());
                                                        if (!IsNull(target))
                                                        {
                                                            target.SetTargetType(ttExecutable); // ttExecutable: no console
                                                            target.SetOutputFilename(Wizard.GetReleaseOutputDir() + Wizard.GetProjectName() + DOT_EXT_EXECUTABLE);
                                                            // enable optimizations for target
                                                            OptimizationsOn(target, Wizard.GetCompilerID());
                                                        }
                                                    
                                                        return true;
                                                    }

                                                    Je suppose que c'est documenté quelque part et qu'il suffit de faire quelques recherches sur le site de Code::Blocks pour savoir de quoi il s'agit exactement...

                                                    http://wiki.codeblocks.org/index.php?t [...] ting_Commands
                                                    etc.

                                                    Ceci, par exemple :
                                                    project.AddLinkLib(_T("SDL.dll"));

                                                    sent le soufre...
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Music only !
                                                      13 octobre 2008 à 12:17:35

                                                      Salut,

                                                      Citation : -ed-

                                                      Ceci, par exemple :

                                                      project.AddLinkLib(_T("SDL.dll"));


                                                      sent le soufre...



                                                      Pas tant que ça, c'est quand même encadré par :
                                                      if (PLATFORM == PLATFORM_MSW)
                                                          {
                                                              .../...
                                                              project.AddLinkLib(_T("SDL.dll"));
                                                              .../...
                                                          }
                                                      


                                                      A+

                                                      Pfeuh
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        13 octobre 2008 à 13:09:28

                                                        Citation : pfeuh

                                                        c'est quand même encadré par :

                                                        if (PLATFORM == PLATFORM_MSW)
                                                            {
                                                                .../...
                                                                project.AddLinkLib(_T("SDL.dll"));
                                                                .../...
                                                            }
                                                        



                                                        Oui, on est bien d'accord. On est en plein dans le problème du P.O !
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Music only !
                                                          13 octobre 2008 à 16:45:28

                                                          Salut,

                                                          Ooooops, j'avais oublié le P.O.! :-° Alors, pour que ça marche chez moi, j'ai du mettre à la main SDL.dll dans le projet, plus précisément dans bin/Release et bin/Debug, puisque c'est là que sont fabriqués les .exe

                                                          A+

                                                          Pfeuh
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            13 octobre 2008 à 17:42:07

                                                            Citation : pfeuh

                                                            pour que ça marche chez moi, j'ai du mettre à la main SDL.dll dans le projet, plus précisément dans bin/Release et bin/Debug,


                                                            Ce qui est totalement absurde. Le principe d'une DLL (ou d'un .so) est de n'être présente qu'une fois sur la machine. J'ai déjà indiqué qu'il fallait qu'elle soit dans \windows\system etc.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Music only !

                                                            Passage à SDL impossible !

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown