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
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)
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)
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
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).
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:
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
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.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
git is great because Linus did it, mercurial is better because he didn't.