Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de compilation !

Jamais vu ca !

Sujet résolu
    16 mai 2006 à 19:28:11

    Bonjour, je suis entrain de réaliser un PONG en SDL
    voila mon code :
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL/SDL.h>

    #define H_ECRAN 480
    #define L_ECRAN 640

    int main(int argc,char *argv[])
    {
        int gagne=0,haut=1,gauche=1;
        SDL_Surface *terrain=NULL, *raq1=NULL, *raq2=NULL, *balle=NULL;
        SDL_Rect pos_balle,pos_raq1,pos_raq2;

        SDL_Init(SDL_INIT_VIDEO);
        terrain=SDL_SetVideoMode(L_ECRAN,H_ECRAN,32,SDL_HWSURFACE);
        SDL_WM_SetCaption("PONG",NULL);

        raq1=SDL_CreateRGBSurface(SDL_HWSURFACE,5,50,32,0,0,0,0);
        raq2=SDL_CreateRGBSurface(SDL_HWSURFACE,5,50,32,0,0,0,0);
        balle=SDL_CreateRGBSurface(SDL_HWSURFACE,5,5,32,0,0,0,0);

        SDL_FillRect(raq1,NULL,SDL_MapRGB(terrain->format,0,0,0));
        SDL_FillRect(raq2,NULL,SDL_MapRGB(terrain->format,0,0,0));
        SDL_FillRect(balle,NULL,SDL_MapRGB(terrain->format,0,255,0));

        pos_balle.x = 318;
        pos_balle.y = 238;
        pos_raq1.x = 20;
        pos_raq1.y = 215;
        pos_raq2.x = 615;
        pos_raq2.y = 215;

        while(!gagne)
        {
            if( pos_balle.y == 0)
                haut=1;
            if( pos_balle.y == (H_ECRAN - balle->h) )
                haut=0;
            if( (pos_balle.x == 20 + raq1->w)
                && (pos_balle.y<=(pos_raq1.y+(raq1->h-balle->h)))
                && (pos_balle.y>=(pos_raq1.y)) )
                gauche=1;
            if( (pos_balle.x == L_ECRAN-(20+raq2->w))
                && (pos_balle.y<=(pos_raq2.y+(raq2->h-balle->h)))
                && (pos_balle.y>=(pos_raq2.y)) )
                gauche=0;

            if( haut )
                pos_balle.y++;
            else
                pos_balle.y--;
            if( gauche )
                pos_balle.x++;
            else
                pos_balle.x--;

            if( pos_balle.x == 5 )
                gagne=1;
            if( pos_balle.x == (L_ECRAN - (5 + balle->w)))
                gagne=2;

            pos_raq1.y = pos_balle.y;
            pos_raq2.y = pos_balle.y;

            SDL_FillRect(terrain,NULL,SDL_MapRGB(terrain->format,255,255,255));
            SDL_BlitSurface(balle,NULL,terrain,&pos_balle);
            SDL_BlitSurface(raq1,NULL,terrain,&pos_raq1);
            SDL_BlitSurface(raq2,NULL,terrain,&pos_raq2);
            SDL_Flip(terrain);

        }


        SDL_FreeSurface(raq1);
        SDL_FreeSurface(raq2);
        SDL_FreeSurface(balle);
        SDL_Quit();
        return EXIT_SUCCESS;
    }




    Mais lorsque je compile, il met 3 minutes a compiler et le log me sort des truc du genre (voila juste le début et la fin parceque ca fait plus d'une page au total:

    Citation : Build Log

    Project : SDL Application
    Compiler : GNU GCC Compiler (called directly)
    Directory : /home/tokou/MyDev/pong/
    --------------------------------------------------------------------------------
    Switching to target: default
    Linking console executable: SDLapp
    .objs/main.o: dans la fonction
    main.c:(.text+0x80): r
    ind
    rs
    Caption
    b/libSDL.a(SDL_alsa_audio.o): dans la fonction
    vailable
    rence ind
    rs
    _open
    b/libSDL.a(SDL_alsa_audio.o): dans la fonction
    vailable
    rence ind
    rs
    _close
    b/libSDL.a(SDL_alsa_audio.o): dans la fonction
    ayAudio
    rence ind
    rs
    _writei
    b/libSDL.a(SDL_alsa_audio.o): dans la fonction
    ayAudio
    rence ind
    rs
    _resume
    b/libSDL.a(SDL_alsa_audio.o): dans la fonction
    ayAudio
    rence ind
    rs
    _prepare


    ...

    Citation : Build Log

    b/libSDL.a(Xinerama.o): dans la fonction
    noramiXGetScreenCount
    rence ind
    rs

    b/libSDL.a(Xinerama.o): dans la fonction
    noramiXGetScreenCount
    rence ind
    rs
    gExtension
    b/libSDL.a(Xinerama.o): dans la fonction
    noramiXGetScreenCount
    rence ind
    rs

    b/libSDL.a(Xinerama.o): dans la fonction
    noramiXGetScreenSize
    rence ind
    rs

    b/libSDL.a(Xinerama.o): dans la fonction
    noramiXGetScreenSize
    rence ind
    rs
    gExtension
    b/libSDL.a(Xinerama.o): dans la fonction
    noramiXGetScreenSize
    rence ind
    rs

    b/libSDL.a(Xinerama.o): dans la fonction
    eramaIsActive
    rence ind
    rs

    b/libSDL.a(Xinerama.o): dans la fonction
    eramaIsActive
    rence ind
    rs

    b/libSDL.a(Xinerama.o): dans la fonction
    eramaQueryScreens
    rence ind
    rs

    b/libSDL.a(Xinerama.o): dans la fonction
    eramaQueryScreens
    rence ind
    rs

    b/libSDL.a(Xinerama.o): dans la fonction
    eramaQueryScreens
    rence ind
    rs
    b/libSDL.a(Xinerama.o): dans la fonction
    eramaQueryScreens
    rence ind
    rs
    gExtension
    b/libSDL.a(Xinerama.o): dans la fonction
    eramaQueryScreens
    rence ind
    rs
    ta
    b/libSDL.a(SDL_dgaevents.o): dans la fonction
    : r
    ind
    rs
    ent
    b/libSDL.a(SDL_aaevents.o): dans la fonction
    Events
    rence ind
    rs
    ouse
    b/libSDL.a(SDL_aaevents.o): dans la fonction
    Events
    rence ind
    rs
    vent
    2: ld a retourn
    d'
    Process terminated with status 1 (3 minutes, 18 seconds)
    0 errors, 0 warnings



    Je ne vois pas ou se situe mon erreur, sachant que d'autres programmes en SDL se compilent normalement sur mon pc !
    J'utilise Code::Block et je suis sous linux !
    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2006 à 13:31:55

      t'as déjà compilé des trucs en SDL ?
      Ca vient peut etre de ton install de la librairie....
      • Partager sur Facebook
      • Partager sur Twitter
        17 mai 2006 à 13:32:37

        Citation : kelk'1

        Je ne vois pas ou se situe mon erreur, sachant que d'autres programmes en SDL se compilent normalement sur mon pc !
        J'utilise Code::Block et je suis sous linux !


        • C'est pas int *argv[] mais char *argv[]
        • SDL_WM_Caption() est une fonction inconnue

        A part çà, le programme fonctionne en mode automatique (renvoi de balle sans erreur). Par contre, il a du mal à se terminer...

        Evidemment, dans le projet, j'ai ajouté les bibliothèques qui vont bien...
        • Partager sur Facebook
        • Partager sur Twitter
        Music only !
          18 mai 2006 à 7:22:48

          Citation : -ed-

          * C'est pas int *argv[] mais char *argv[]
          * SDL_WM_Caption() est une fonction inconnue


          Je vient de corriger ces erreurs mais ca marche toujours pas !
          Ca m'étonnerai que SDL soit mal installé chez moi ( j'ai suivi CE tuto pour l'installer ) et je n'ai pas eu de probleme avec la compilation d'autres programmes en SDL
          • Partager sur Facebook
          • Partager sur Twitter
            18 mai 2006 à 7:26:10

            tu as linke tes programmes et mis SDL.dll dans otn dossier ?
            • Partager sur Facebook
            • Partager sur Twitter
              18 mai 2006 à 7:33:04

              Je crois pas qu'il y ait de dll sous linux !

              Edit : Bon, j'ai essayé de compiler mon programme en console, et il me sort un truc un peu plus compréhensible :

              Citation : Terminal

              $ gcc -o main main.c
              /tmp/ccQZpyc6.o: dans la fonction « main »:
              main.c:(.text+0x55): référence indéfinie vers « SDL_Init »
              main.c:(.text+0x6b): référence indéfinie vers « SDL_SetVideoMode »
              main.c:(.text+0x80): référence indéfinie vers « SDL_WM_SetCaption »
              main.c:(.text+0x98): référence indéfinie vers « SDL_CreateRGBSurface »
              main.c:(.text+0xb3): référence indéfinie vers « SDL_CreateRGBSurface »
              main.c:(.text+0xce): référence indéfinie vers « SDL_CreateRGBSurface »
              main.c:(.text+0xe6): référence indéfinie vers « SDL_MapRGB »
              main.c:(.text+0xf7): référence indéfinie vers « SDL_FillRect »
              main.c:(.text+0x10c): référence indéfinie vers « SDL_MapRGB »
              main.c:(.text+0x11d): référence indéfinie vers « SDL_FillRect »
              main.c:(.text+0x135): référence indéfinie vers « SDL_MapRGB »
              main.c:(.text+0x146): référence indéfinie vers « SDL_FillRect »
              main.c:(.text+0x2cc): référence indéfinie vers « SDL_MapRGB »
              main.c:(.text+0x2dd): référence indéfinie vers « SDL_FillRect »
              main.c:(.text+0x2f1): référence indéfinie vers « SDL_UpperBlit »
              main.c:(.text+0x305): référence indéfinie vers « SDL_UpperBlit »
              main.c:(.text+0x319): référence indéfinie vers « SDL_UpperBlit »
              main.c:(.text+0x327): référence indéfinie vers « SDL_Flip »
              main.c:(.text+0x33f): référence indéfinie vers « SDL_FreeSurface »
              main.c:(.text+0x34d): référence indéfinie vers « SDL_FreeSurface »
              main.c:(.text+0x35b): référence indéfinie vers « SDL_FreeSurface »
              main.c:(.text+0x363): référence indéfinie vers « SDL_Quit »
              collect2: ld a retourné 1 code d'état d'exécution



              Bon, maintenant j'aimerai bien savoir comment remédier a ca
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                18 mai 2006 à 8:09:53

                Erreur de linkage.....
                Si il y a des dlls sous linux, mais je crois qu'on les appelle so
                Quand ya ps le dlls ça fait pas d'erreurs de compilation, mais on peut pas lancer le projet
                • Partager sur Facebook
                • Partager sur Twitter
                  18 mai 2006 à 13:25:30

                  Citation : Zulon

                  Erreur de linkage.....



                  oui mais comment le résoudre ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 mai 2006 à 14:04:02

                    Citation : kelk'1

                    Je crois pas qu'il y ait de dll sous linux !

                    Edit : Bon, j'ai essayé de compiler mon programme en console, et il me sort un truc un peu plus compréhensible :

                    $ gcc -o main main.c

                    Cette commande est insuffisante. Il faut ajouter
                    -L<chemin de libsdl.a> -lsdl

                    Je te conseille d'apprendre à gerer tes projets avec make et une fichier Makefile.
                    Sinon tu peux installer Code::Blocks pour Linux...

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !
                      18 mai 2006 à 14:13:47

                      J'ai déja code::blocks
                      J'ai seulement essayé de compiler avec la console parce que ca ne donnait rien avec Codeblocks
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        18 mai 2006 à 14:35:20

                        Y'a -lsdlmain à ajouter aussi, non?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 mai 2006 à 14:58:47

                          Citation : Zulon

                          Y'a -lsdlmain à ajouter aussi, non?

                          C'est bien possible. La SDL, c'est pas mon truc. Lire le cours de M@teo. Je donne le principe, c'est tout...
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            18 mai 2006 à 17:27:16

                            Bon, j'ai réglé mon problème avec l'aide de deuterium360
                            je me suis rendu compte qu'au lieu d'ajouter SDL et SDLmain dans les options du linker, j'ai ajouté les fichiers .a
                            Donc ca marchait pas
                            mais la tout est rentré dans l'ordre, merci a tous !
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Probleme de compilation !

                            × 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