Le fichier, il ne faut pas que le renommer, il faut le mettre dans le projet. parce que pour le projet c'est toujours main.cpp
Donc tu le renommes dans ton explorateur de fichier en main.c, et dans Code::blocks tu supprimes le fichier main.cpp et tu ajoute le fichier main.c au projet.
PS : SDL est très ancien, il faut maintenant plutôt utiliser SDL2.
Ce chapitre avais probablement était fait pour apprendre à utiliser une bibliothèque externe. voici un cours à ce sujet Installer et configurer une bibliothèque
je te remercie aussi pour ton conseil qui est d'utiliser SDL2, mais comme le cours utilise SDL je préfère l'utiliser aussi par peur de ne pas pouvoir suivre le cours de la même manière avec SDL2.
Renommer le fichier puis l'ajouter à fonctionné, mais les erreurs (qui sont les mêmes) sont toujours là.
Si je ne trouve pas d'alternative j'utiliserai SDL2, en espérant pouvoir finir le cours pour apprendre le C avec, ça m'embêterait de devoir arrêter aussi près de la fin.
Pour les erreurs que tu cites, c'est que le linker ne trouvent pas les bibliothèques soit parce que elles ne sont pas dans les options du linker, soit parce que le chemin où elles ce trouvent n'est pas dans les chemins de recherches du linker. Si tu ne comprend pas, va lire le tuto que je t'ai mentionné.
Ok, j'ai regardé le tuto (pas sur d'avoir tout compris) et j'ai passé ma soirée à bidouiller avec le linker, mais j'ai toujours les même erreurs. Donc pour être sûr de n'avoir rien rater je vais résumer tout ce que j'ai fait et dites moi si j'ai oublier quelque chose d'important (c'est probablement le cas).
Aussi entre temps les erreurs ont changé, pour devenir:
cannot find -ISDL et cannot find -ISDL_main
je ne suis pas sûr de la raison.
Avant la création du projet SDL, j'ai mis les tous les fichiers demandé dans les dossiers correspondant:
les fichiers libXXX.a dans C:\Program Files\CodeBlocks\MinGW\lib
les fichiers .h dans C:\Program Files\CodeBlocks\MinGW\include
Ensuite j'ai créé un projet SDL1, modifier le main.cpp en main.c.
modifier le code à l'intérieur pour que mon programme ressemble à ça:
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
int main(int argc, char *argv[])
{
return 0;
}
J'ai ensuite regardé le tuto et suivis les instructions:
- je suis aller dans build options, puis search directories
- ./include dans compiler et ./lib dans Linker
- ensuite dans Linker settings
A partir de la j'ai essayé différent truc:
-j'ai tout d'abord suivis le tuto et mis les fichiers libXXX.a présent dans le dossier lib dans Link libraries
résultat: en plus des erreurs déja cité, d'autre ce sont rajouté avec le nom des fichiers que je venais d'ajouter.
- Je les ai donc enlevé et tester de mettre à la place le nom des erreurs SDL et SDL_main dans Link libraries, mais pareil les erreurs sont simplement dupliquer pour afficher deux fois les erreurs mentionner plus haut.
- Encore une fois je les ai enlevé et cette fois je les ai mis dans Other linker options sous la forme marqué dans l'espace d'erreur,
-ISDL et -ISDL_main
cette fois ils sont simplement ignoré les erreurs sont les même mais pas dupliquer, comme avant quoi.
J'imagine que j'ai fait une erreur ou que j'ai oublié quelque chose ou bien que je n'ai pas suivis correctement le tuto, mais la je suis perdu.
Dans mon dossier lib, du dossier SDL -1.2.15 extrait de SDL -devel- 1.2.15-mingw32.tar.gz, il n'y a pas de fichier libSDL.a et libSDL_main.a. Il y a 6 fichiers :
- libSDL.dll.a
- libSDL.la (étrange le .la, mais je m'y connais pas assez pour savoir si c'est normal)
- libSDLmain.a
les 3 autres sont les même mais ils ont ._ devant eux.
Mais dans la partie other linker je n'avais que deux trucs : -ISDL et -ISDL_main, je n'aurai pas la possibilité de travailler mon projet cette fin d'après midi donc je verrai demain
Quand j'utilise la partie de droite, Other linker options, avec la notation -lSDL.dll et -lSDLmain, les observations reste les mêmes.
On fait l'un ou l'autre au choix.
Quand tu as : le message d'erreur undefined reference to 'Fonction' c'est que le compilateur de trouvent pas la définition de fonction. Si c'est une fonction d'une bibliothèque externe, c'est le cas de SDL, il faut lié le fichier de bibliothèque qui contient la définition de cette fonction (fichier .a)
Quand tu as cannot find -lxxx c'est que tu demandes au linker de lié un fichier (libxxx.a) à ton projet (tu la mis dans les options), mais le linker ne le trouve pas soit parce qu'il n'existe pas, soit parce que le chemin où il ce trouve n'est pas répertorié dans les chemin de recherche.
( Je n'utilise pas SDL, j'ai installé il y a quelque temps SDL2 juste pour voir si c'était si compliqué à installer vu le nombre de message sur le forum. Je n'ai pas déplacé les fichiers, j'ai juste rajouté les chemins à mon projet de test, ça a fonctionné du premier coup).
Merci pour la correction sur -lSDL. Après avoir essayé 2-3 trucs avec le linker, j'ai remarqué plusieurs choses.
Mais tout d'abord j'ai une question. J'ai remarqué qu'il y avait deux endroit pour utilise le linker, le premier est le Project build options (Project > Build options...) et le deuxième est Compiler settings (Settings > Compiler...). Lequel je devrais utilisé ?
Pour ce qui est des observations les voici:
1- Si les erreurs ont changé en cannot find -lSDL et -lSDL_main, c'est de ma faute, c'est moi qui avais mis les mauvais fichiers dans le linker.
2- Les erreurs apparaissent quand je met quelque chose dans le linker. Donc quand je met libSDL.dll.a et libSDLmain.a dans Linker libraries (ou -lSDL.dll et -lSDLmain dans Other linker options), les erreurs apparaissent. Pour tester, j'ai rajouté libbonjour.a dans la partie de gauche et en plus des erreurs habituel, cannot find -lbonjour est apparue.
3- J'ai vu dans plusieurs tuto qu'il fallait mettre libmingw32.a (ou -lmingw32 dans la partie de droite). Aucune erreur n'est apparue mentionnant mingw32.
4- J'ai essayé de mettre les fichiers libSDL.dll.a et libSDLmain.a avec le chemin relatif et l'erreur était undefined reference to 'WinMain', exactement quand j'ai laissé le linker vide.
je vais éviter de trop modifier ce message car la première version à été supprimer pour spam
je te remercie aussi pour ton conseil qui est d'utiliser SDL2, mais comme le cours utilise SDL je préfère l'utiliser aussi par peur de ne pas pouvoir suivre le cours de la même manière avec SDL2.
Renommer le fichier puis l'ajouter à fonctionné, mais les erreurs (qui sont les mêmes) sont toujours là.
Si je ne trouve pas d'alternative j'utiliserai SDL2, en espérant pouvoir finir le cours pour apprendre le C avec, ça m'embêterait de devoir arrêter aussi près de la fin.
Mauvais cours, changer cours.
SDL 1 est obsolète et plus ni supporté ni recommandé par les développeurs depuis plus de 8 ans. Ton application est donc déjà obsolète.
git is great because Linus did it, mercurial is better because he didn't.
Je n'utilise pas SDL, mais je viens de refaire une application sdl2 mais ça serait sdl1 ça serait probablement pareil.
Donc les nouveaux code::blocks sont par défaut avec MinGW_64 en 64 bits et si tu fais la liaison avec les lib 32 bits ça sort donc cette erreur aussi.
Donc si tu compile en 64 bits liaison avec lib 64bits et si tu compiles 32 bits liaison avec les lib 32 bits. (je ne sais pas si sdl1 existe en 64 bits, j'ai pas vérifié).
...
Problème avec SDL.
× 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.
git is great because Linus did it, mercurial is better because he didn't.