Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL: Gros bug...

Que sur mon ordi ?

    20 octobre 2006 à 9:17:13

    Bonjour,

    J'ai commencer un programme en SDL et dès le debut il bug, je ne voit pas du tout qu'est qui ne va pas et je croie que c'ets mon ordi qui bug...

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

    void pause();

    int main(int argc, char *argv[])
    {
        SDL_Surface* ecran = NULL;
        SDL_Surface* carrer = NULL;
        SDL_Surface* autre = NULL;

        SDL_Init(SDL_INIT_VIDEO);
        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);

        pause();
        SDL_Quit();
            return EXIT_SUCCESS;
    }

    void pause()//Fonction de pause
    {
        int continuer = 1;
        SDL_Event event;

        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
            }
        }
    }


    Voila, est que ce code plante chez vous ?

    Mon compilateur me mais sa:

    Project : Console application
    Compiler : GNU GCC Compiler (called directly)
    Directory : C:\Mes documents\test c++\
    --------------------------------------------------------------------------------
    Switching to target: default
    Linking executable: console.exe
    .objs\main.o:main.c:(.text+0x6b): undefined reference to `SDL_Init'
    .objs\main.o:main.c:(.text+0x8f): undefined reference to `SDL_SetVideoMode'
    .objs\main.o:main.c:(.text+0xc8): undefined reference to `SDL_WaitEvent'
    C:\PROGRAM FILES\CODEBLOCKS\lib/libmingw32.a(main.o):main.c:(.text+0x106): undefined reference to `WinMain@16'
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 0 seconds)

    • Partager sur Facebook
    • Partager sur Twitter
      20 octobre 2006 à 9:34:56

      tu as probablement oublier de "linker" SDL.lib et SDLmain.lib
      • Partager sur Facebook
      • Partager sur Twitter
        20 octobre 2006 à 11:08:10

        Quelques corrections :

        Au lieu de :

            SDL_Surface* ecran = NULL;
            SDL_Surface* carrer = NULL;
            SDL_Surface* autre = NULL;

        tu peux mettre :

          SDL_Surface *ecran = NULL, *carrer = NULL, *autre = NULL;


        Ensuite tu oublie ca avant le return :
        SDL_Quit();


        Le printf ne marchera pas car tu n'as plus de console, redirige ca vers le fichier standard de sortie. Voir les cours de M@teo.

        Et plus de :
        return 0;

        Mais :
        return EXIT_SUCCESS;


        Ensuite pour ton probleme minirop y a repondu

        Voila.

        Kurapix
        • Partager sur Facebook
        • Partager sur Twitter
          20 octobre 2006 à 13:37:43

          le printf peut marcher s'il n'a pas configuré son projet en temps qu'application GUI, enfin sous code::block il me semble que c'est comme ça
          • Partager sur Facebook
          • Partager sur Twitter
            20 octobre 2006 à 14:09:14

            Avec SDL pour windows le printf ne marchera pas.

            Sinon, ton code est correct, d'ailleurs il compile comme tu peux le voir.
            • Partager sur Facebook
            • Partager sur Twitter
              21 octobre 2006 à 12:18:37

              Je n'ai pas compris ce que tu voulais dire minirop...
              J'ai aussi oublier ce que voulais dire linker.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                21 octobre 2006 à 12:31:21

                Pour savoir ce que veut dire linker, va dans les cours de M@teo. ;)

                Pour le faire sous Code::Blocks, Clic droit sur ton projet, puis "Build options"
                Ensuite, dans l'onglet Linker, tu ajoutes les librairies manquantes.
                • Partager sur Facebook
                • Partager sur Twitter
                  21 octobre 2006 à 17:58:58

                  Sa à corriger un bug mais il y en a un autre encore, je ne sais pas comment faire...

                  Message:
                  Project : Console application
                  Compiler : GNU GCC Compiler (called directly)
                  Directory : C:\Mes documents\test c++\
                  --------------------------------------------------------------------------------
                  Switching to target: default
                  Linking executable: console.exe
                  C:\PROGRAM FILES\CODEBLOCKS\lib/libmingw32.a(main.o):main.c:(.text+0x106): undefined reference to `WinMain@16'
                  collect2: ld returned 1 exit status
                  Process terminated with status 1 (0 minutes, 0 seconds)

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    21 octobre 2006 à 18:11:53

                    Vérifie l'ordre de linkage. A savoir:
                    libmingw32.a
                    libSDLmain.a
                    libSDLdll.a
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      21 octobre 2006 à 18:36:07

                      déclares ton main avec (int argc, char **argv) plutôt que char *argv[]. Je sait que les deux écritures sont équivalentes, mais moi j'ai eu du mal à compiler avec *argv[], et beaucoup moins avec *argv[]. D'ailleurs je ne sait pas pourquoi.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 octobre 2006 à 18:51:49

                        Citation : GuilOooo

                        [...] j'ai eu du mal à compiler avec *argv[], et beaucoup moins avec *argv[].



                        ==>

                        Citation : Correction

                        [...] j'ai eu du mal à compiler avec *argv[], et beaucoup moins avec **argv.



                        :D
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          21 octobre 2006 à 22:39:14

                          Non, niveau langage c'est la même. La seule chose qui change, c'est l'ordre de linkage ^^ .

                          Tchaw !
                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 octobre 2006 à 1:25:34

                            Citation : Kurapix


                            Au lieu de :


                                SDL_Surface* ecran = NULL;
                                SDL_Surface* carrer = NULL;
                                SDL_Surface* autre = NULL;


                            tu peux mettre :


                              SDL_Surface *ecran = NULL, *carrer = NULL, *autre = NULL;



                            C'est techniquement possible, mais pas pratique du tout à maintenir...

                            Je déconseille...
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Music only !
                              22 octobre 2006 à 1:31:21

                              Pourquoi c'est pas pratique a maintenir?
                              La il n'y a que 3 pointeurs, si il y en a plus c'est sur que ... ><
                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 octobre 2006 à 1:36:55

                                Citation : Kurapix

                                Pourquoi c'est pas pratique a maintenir?


                                Je préfère donner au pointeurs leurs bonnes valeurs tout de suite quand c'est possible :

                                   TA *pa = fa();
                                   if (pa != NULL)
                                   {
                                      TB*pb = fb();
                                      if (pb != NULL)
                                      {

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Music only !
                                  22 octobre 2006 à 17:55:40

                                  J'ai changer argv[] par **argv et maintenant il m'affiche sa:

                                  roject : Console application
                                  Compiler : GNU GCC Compiler (called directly)
                                  Directory : C:\Mes documents\test c++\
                                  --------------------------------------------------------------------------------
                                  Switching to target: default
                                  Linking executable: console.exe
                                  mingw32-g++.exe: ..\..\Program Files\CodeBlocks\mingw32\lib\libSDL.a: No such file or directory
                                  Process terminated with status 1 (0 minutes, 0 seconds)
                                  0 errors, 0 warnings

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    22 octobre 2006 à 18:02:09

                                    çà dit bien ce que çà veux dire.
                                    il ne trouve pas libSDL.a
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      22 octobre 2006 à 18:27:47

                                      Citation : sylvain1264


                                      mingw32-g++.exe: ..\..\Program Files\CodeBlocks\mingw32\lib\libSDL.a: No such file or directory

                                      Tu compiles en C++, c'est normal ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Music only !

                                      SDL: Gros bug...

                                      × 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