Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Makefile libsdl2

    26 novembre 2020 à 19:26:27

    Bonjour à tous,

    Voilà j'ai suivi le cours apprendre à programmer en C jusqu'à présent sans rencontrer de problème avec CodeBlocks sous Windows jusqu'à la partie concernant la SDL.

    Cependant maintenant je suis passé sous Linux parce que j'aime bien compiler à la main et j'ai une erreur de compilation avec le Makefile proposé qui concerne la libsdl1.2.

    Voici les paquets que j'ai installés :

    andrea@andrea-desktop:~/Documents/Projets/C/SDL$ dpkg -l | grep libsdl
    ii  libsdl1.2-dev                              1.2.15+dfsg2-5                        amd64        Simple DirectMedia Layer development files
    ii  libsdl1.2debian:amd64                      1.2.15+dfsg2-5                        amd64        Simple DirectMedia Layer
    ii  libsdl2-2.0-0:amd64                        2.0.10+dfsg1-3                        amd64        Simple DirectMedia Layer
    ii  libsdl2-dev:amd64                          2.0.10+dfsg1-3                        amd64        Simple DirectMedia Layer development files
    ii  libsdl2-gfx-1.0-0:amd64                    1.0.4+dfsg-3                          amd64        drawing and graphical effects extension for SDL2
    ii  libsdl2-image-2.0-0:amd64                  2.0.5+dfsg1-2                         amd64        Image loading library for Simple DirectMedia Layer 2, libraries
    ii  libsdl2-mixer-2.0-0:amd64                  2.0.4+dfsg1-2build1                   amd64        Mixer library for Simple DirectMedia Layer 2, libraries
    ii  libsdl2-net-2.0-0:amd64                    2.0.1+dfsg1-4                         amd64        Network library for Simple DirectMedia Layer 2, libraries
    ii  libsdl2-ttf-2.0-0:amd64                    2.0.15+dfsg1-1                        amd64        TrueType Font library for Simple DirectMedia Layer 2, libraries
    

    Voici mon main.c

    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    
    void pause();
    
    int main(int argc, char *argv[])
    {
        if (SDL_Init(SDL_INIT_VIDEO) == -1) // Démarrage de la SDL. Si erreur :
        {
            fprintf(stderr, "Erreur d'initialisation de la SDL : %s\n", SDL_GetError()); // Écriture de l'erreur
            exit(EXIT_FAILURE); // On quitte le programme
        }
        SDL_SetVideoMode(640,480,32,SDL_HWSURFACE | SDL_RESIZABLE);
    
        SDL_Quit();
    
        return EXIT_SUCCESS;
    }
    
    void pause()
    {
        int continuer = 1;
        SDL_Event event;
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
            }
        }
    }

     Voici mon Makefile :

    CPP=gcc    #Commande du compilateur
    CFLAGS=-O3 #Option d'optimisation du programme
    LDFLAGS=-lSDL -lSDL_mixer #Linker
    EXEC=main  #Nom du programme a modifier

    all: ${EXEC}

    ${EXEC}: ${EXEC}.o
        ${CPP} $(CFLAGS) -o ${EXEC} ${EXEC}.o ${LDFLAGS}

    ${EXEC}.o: ${EXEC}.c
        ${CPP} $(CFLAGS) -o ${EXEC}.o -c ${EXEC}.c


    clean:
        rm -fr *.o

    mrproper: clean
        rm -fr ${EXEC}

    Voici l'erreur que j'obtiens :

    andrea@andrea-desktop:~/Documents/Projets/C/SDL$ make
    makefile:12: avertissement : surchargement de la recette pour la cible « main »
    makefile:9: avertissement : ancienne recette ignorée pour la cible « main »
    make: Dépendance circulaire main <- main abandonnée.
    cc -O3   -lSDL -lSDL_mixer      -o .c
    /usr/bin/ld : ne peut trouver -lSDL_mixer
    collect2: error: ld returned 1 exit status
    make: *** [<commande interne> : .c] Erreur 1
    


    J'ai aussi essayé de compiler à la main avec la libsdl1.2 et la libsdl2 (en mettant #include <SDL2/SDL.h> dans main.c)

    avec les options de compilations adaptées (voir https://doc.ubuntu-fr.org/sdl) mais rien n'y fait.

    Merci d'avance à quiconque sera en mesure de m'aider.

    Andrea

    • Partager sur Facebook
    • Partager sur Twitter
      26 novembre 2020 à 19:38:35

      Hello,

      Bon, réponse non constructive, mais pas besoin de changer d'os pour compiler à la main: ça se fait très bien sous windows (c'est d'ailleurs ce que je fait)

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        26 novembre 2020 à 20:35:00

        D'après la sortie de dpkg, tu n'as pas, semble-t-il, installé : libsdl-mixer1.2 et libsdl-mixer1.2-dev

        • Partager sur Facebook
        • Partager sur Twitter
          28 novembre 2020 à 13:34:55

          Ça y est j'ai trouvé la solution !

          Ne vous inquiétez je n'ai pas passé tout ce temps à chercher, c'était finalement très simple.
          En fait tout est bien expliqué ici https://doc.ubuntu-fr.org/sdl et là https://wiki.libsdl.org/FAQLinux , c'était facile et j'avais seulement mal suivi la procédure finalement.

          Dlks a écrit:

          D'après la sortie de dpkg, tu n'as pas, semble-t-il, installé : libsdl-mixer1.2 et libsdl-mixer1.2-dev


          Merci, j'avais effectivement oublié d'installer ces paquets !

          edgarjacobs a écrit:

          Hello,

          Bon, réponse non constructive, mais pas besoin de changer d'os pour compiler à la main: ça se fait très bien sous windows (c'est d'ailleurs ce que je fait)

          En compilant à la main dans l'invite de commande de Visual Studio ? Ou sans passer par un IDE ? Je serais curieux de savoir comment faire...

          Voilà mon Makefile "maison" pour ceux que ça intéresse :

          CPP=gcc		#Commande du compilateur
          CFLAGS=-Wall -Wextra	#Options du compilateur
          SDL_CFLAGS := $(shell sdl-config --cflags)	#Options de compilation pour la SDL1.2
          SDL_LDFLAGS := $(shell sdl-config --libs)	#Options de linker pour la SDL1.2
          SLD_LIB_ANNEXES=-lSDL_mixer	#Bibliothèques annexes à ajouter si besoin
          EXEC=main
          
          all: ${EXEC}
          
          ${EXEC}: ${EXEC}.o
          	${CPP} -o ${EXEC} ${EXEC}.o ${SDL_LDFLAGS}
          
          ${EXEC}.o: ${EXEC}.c
          	${CPP} ${CFLAGS} -c ${EXEC}.c ${SDL_CFLAGS} ${SDL_LIB_ANNEXES}
          
          
          clean:
          	rm *.o ${EXEC}

          il marche pour la SDL1.2, quelques trucs à modifier pour la SDL2 (voir avec les liens que j'ai donnés plus haut).

          • Partager sur Facebook
          • Partager sur Twitter
            28 novembre 2020 à 15:42:59

            Re,-

            Andrea20 a écrit:

            En compilant à la main dans l'invite de commande de Visual Studio ? Ou sans passer par un IDE ? Je serais curieux de savoir comment faire...

            Sous windows, en mode console (windows+R, cmd.exe -- ou comme moi, un raccourci sur le bureau avec mes options pour l'affichage de cmd.exe), et un makefile:

            EXE=bin/xxx.exe
            COPTS=-std=c11 -c -Wall -Wextra -Wpedantic -Wunused
            OBJS=xxx.o xxx_movement.o xxx_search.o xxx_print.o xxx_menu.o xxx_visa_new.o xxx_visa_del.o xxx_help.o xxx_addmvt.o xxx_ico.o
            NODEP=rm.o ..\gett\gett.o
            LIBS=-lmingw32 -lSDLmain -lSDL -lSDL_ttf -lSDL_image -lpg -lGdi32 -lWinspool -lComdlg32
            HDEP=xxx.h xxxconst.h
            
            $(EXE): $(OBJS)
            	gcc -Wl,--subsystem=windows -o$(EXE) $(OBJS) $(NODEP) $(LIBS)
            	
            xxx.o: xxx.c $(HDEP)
            	gcc $(COPTS) xxx.c
            	
            xxx_movement.o: xxx_movement.c $(HDEP)
            	gcc $(COPTS) xxx_movement.c
            	
            xxx_search.o: xxx_search.c $(HDEP)
            	gcc $(COPTS) xxx_search.c
            	
            xxx_print.o: xxx_print.c $(HDEP)
            	gcc $(COPTS) xxx_print.c
            	
            xxx_menu.o: xxx_menu.c $(HDEP)
            	gcc $(COPTS) xxx_menu.c
            	
            xxx_help.o: xxx_help.c $(HDEP)
            	gcc $(COPTS) xxx_help.c
            	
            xxx_visa_new.o: xxx_visa_new.c $(HDEP)
            	gcc $(COPTS) xxx_visa_new.c
            	
            xxx_visa_del.o: xxx_visa_del.c $(HDEP)
            	gcc $(COPTS) xxx_visa_del.c
            	
            xxx_addmvt.o: xxx_addmvt.c $(HDEP)
            	gcc $(COPTS) xxx_addmvt.c
            
            xxx_ico.o: xxx_ico.rc
            	windres -i xxx_ico.rc -o xxx_ico.o
            		
            

            Ou encore un fichier .bat

            @Echo off
            gcc -std=c11 -Wunused -Wswitch-default -Wall -Wextra %1.c -o %1.exe -lmingw32 -lsdl2main -lsdl2 -lsdl2_ttf -lsdl2_image -lsdl2_mixer -lsdl2_gfx -lpg
            


            -
            Edité par edgarjacobs 28 novembre 2020 à 15:57:30

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              30 novembre 2020 à 9:17:01

              Par contre la convention d'include c'est SDL.h (et c'est comme ça que sont configuré pkg-config et fichiers de configuration CMake), inclue <SDL.h> si tu veux être portable.

              Et passe à SDL 2. SDL 1.2 c'est obsolète et plus supporté depuis plus de 8 ans.

              -
              Edité par markand 30 novembre 2020 à 9:17:31

              • Partager sur Facebook
              • Partager sur Twitter

              git is great because Linus did it, mercurial is better because he didn't.

              Problème Makefile libsdl2

              × 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