Comment faire une compilation de projet SDL sous Code Blocks ?

Solutions (9)
Tags :
  • Directory
  • Super Mario
  • Programmation
, Maître Yoda |
Bonjour tt le monde :hello:  !

Voila, j'ai téléchargé le code source du tp de Mario Sokoban du site du zéro et je n'arrive pas à l'éxécuter (je suis sous Code::Blocks) :??:  ...
Deux erreurs s'affichent lors de la compilation, error: SDL/SDL.h : No such file or directory et error: SDL/SDL_image.h : No such file or directory.
Je ne comprend pas, j'ai bien été dans le menu build options pour ajouter le chemin menant aux fichiers de SDL_image, dans le dossier correspondant à mon programme j'ai placé tous les fichiers dll pour utiliser la SDL, et la SDL est bien installée car j'ai déjà exécuté des applications SDL.
Si quelqu'un pouvait m'aider je lui en serais très reconnaissant... :) 
  • Meuniers a édité ce message
  • Meuniers a édité ce message
Contenus similaires
Score
0
òh
òi
|
regarde si tu as un log de compilation : une zone qui affiche la commande de compilation.
  • Commenter cette réponse |
Score
0
òh
òi
, Maître Yoda |
Pardonne mon ignorance mais c quoi un gcc ou g++ et qu'est-ce que tu entends par si tu peux voir la compilation?
  • Commenter cette réponse |
Score
0
òh
òi
|
Je ne me rappelle plus de codeblocks, mais normalement, oui, l'ajouter dans l'arborescence devrait suffire.

On n'inclut pas un fichier .c dans un autre. Enfin, c'est possible, mais tu ne fais pas de la compilation séparée. Un #include ne fait qu'un gros copier-coller avant la compilation.

Si tu peux voir la commande compilation, tu dois avoir un gcc ou g++ par compilation de fichier .c, et un gcc ou g++ pour faire le link.
  • Commenter cette réponse |
Score
0
òh
òi
, Maître Yoda |
Merci encore pour ta réponse. Moi, quand tu me dis te rajouter un fichier dans un projet, il faut bien faire un clic droit sur le nom du projet dans l'arborescence, choisir add files et ajouter les fichiers, non? Parce ce que je l'ai fait des dizaines de fois et ça ne fonctionne toujours pas :??:  . Cependant, j'ai essayé un truc, j'ai inclu tous les fichiers.c en haut du main et la surprise, ça marche ...
  • Commenter cette réponse |
Score
0
òh
òi
|
Cette erreur est une erreur du linker (qui prend tous les fichiers objets générés lors de la compilation de chaque fichier et qui les réunis pour faire l'exe).
Dans ton fichier compilé main.o, il y a une référence à une fonction "jouer", et il n'arrive pas à trouvé le code compilé de cette fonction.

Donc, pour les prototype, c'est bon, mais tu n'as pas compilé le fichier .c qui contient la fonction "jouer".
Si tu l'as mis dans jeu.c, alors rajoute ce fichier dans ton projet.
  • Commenter cette réponse |
Score
0
òh
òi
, Maître Yoda |
Merci pour ta réponse, j'avais en effet oublié d'ajouter les fichiers que j'avais créés au projet, mais mon problème n'est tjrs pas résolu à la compilation j'ai deux erreurs qui s'affichent :
44 undefined reference to 'jouer(SDL *surface)' et 47 undefined reference to 'editeur(SDL *surface)'
Tiens je te donne le main pour que tu voies:

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <SDL/SDL.h>
  4. #include <SDL/SDL_image.h>
  5.  
  6. #include "constantes.h"
  7. #include "jeu.h"
  8. #include "editeur.h"
  9. #include "fichiers.h"
  10.  
  11. int main(int argc, char *argv[])
  12. {
  13. SDL_Surface *ecran = NULL, *menu = NULL;
  14. SDL_Rect positionMenu;
  15. SDL_Event event;
  16.  
  17. int continuer = 1;
  18.  
  19. SDL_Init(SDL_INIT_VIDEO);
  20.  
  21. SDL_WM_SetIcon(IMG_Load("caisse.jpg"), NULL); // L'icône doit être chargée avant SDL_SetVideoMode
  22. ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
  23. SDL_WM_SetCaption("Mario Sokoban", NULL);
  24.  
  25. menu = IMG_Load("menu.jpg");
  26. positionMenu.x = 0;
  27. positionMenu.y = 0;
  28.  
  29. while (continuer)
  30. {
  31. SDL_WaitEvent(&event);
  32. switch(event.type)
  33. {
  34. case SDL_QUIT:
  35. continuer = 0;
  36. break;
  37. case SDL_KEYDOWN:
  38. switch(event.key.keysym.sym)
  39. {
  40. case SDLK_ESCAPE: // Veut arrêter le jeu
  41. continuer = 0;
  42. break;
  43. case SDLK_KP1: // Demande à jouer
  44. jouer(ecran);
  45. break;
  46. case SDLK_KP2: // Demande l'éditeur de niveaux
  47. editeur(ecran);
  48. break;
  49. }
  50. break;
  51. }
  52.  
  53. // Effacement de l'écran
  54. SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
  55. SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
  56. SDL_Flip(ecran);
  57. }
  58.  
  59. SDL_FreeSurface(menu);
  60. SDL_Quit();
  61.  
  62. return EXIT_SUCCESS;
  63. }


les prototypes de jouer et editeur sont dans jeu.h et editeur.h

Merci pour ton aide :) 
  • Commenter cette réponse |
Score
0
òh
òi
|
Moi, je te parle de la configuration soit de codeblock soit de ton projet, car pour configurer ton projet tu dois configurer:
- la liste des répertoires d'inclusions (généralement les chemins des répertoires ".../include")
- la liste des répertoires des bibliothèque (les chemins des repertoires contenant directement les .a)
- la liste des bibliothèque à lier statiquement ou dynamiquement (-l SDL, -l SDLMain)

Si tu inclus des .h et des .c/.cpp que tu as toi-même créé, il te faut les ajouter dans ton projet (dans l'arborescence).

Si tu crées plusieurs fichiers .c, il te faut les ajouter sinon codeblock ne saura pas qu'il faut les compiler.
  • Commenter cette réponse |
Score
0
òh
òi
, Maître Yoda |
Merci de ta réponse Cricky mais j'ai fais comme tu as dis j'ai rajouter le chemin de deux fichiers .a dans build options qui sont libSDL.dll.a et libSDLmain.a le chemin d'un fichier.lib, SDL_image.lib et je ne peux pas inclure de fichiers.h, j'ai juste un fichier.h dans le dossier de mon projet SDL_image.h et ça ne fonctionne tjrs pas... :non:  Je ne comprends pas, pour mes autres projets SDL, j'ai juste rajouté le chemin du fichier SDL_image.lib dans build options et mis le fichier SDL_image.h dans le dossier du projet en plus de tous les fichiers DLL (SDL.dll ... etc ) et tout fonctionnait :??:  .
Si tu pouvais m'éclairer ce serait vraiment sympa.
  • Commenter cette réponse |
Score
0
òh
òi
|
Attention de ne pas mettre le chemin ..../SDL/ , mais le chemin parent, car tu fais un #include "SDL/SDL_image.h" (tu rajoute le répertoire SDL dans l'include).

Au final, tu as 2 répertoire à ajouter:
- le répertoire d'inclusion des fichiers (fichiers .h)
- le répertoire des bibliothèques (fichiers .a)
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS