Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec SDL.

Sujet résolu
    27 août 2021 à 16:07:35

    Bonjour,

    je suis en train de suivre le cours sur le langage C et suis bloqué sur le chapitre sur la bibliothèque SDL. J'utilise CodeBlocks.

    Voici les quelques problèmes que je rencontre:

    - Lors de la création d'un projet SDL, à chaque fois le main est un main.cpp et non main.c.

    Lors de mes recherches, j'ai vu le conseil de renommé le fichier en main.c manuellement. Or le fichier devient inutilisable après.

    - Deuxièmement, si le problème ne vient pas de celui plus haut, je me retrouve avec deux erreurs lorsque j'exécute le programme:

    ld.exe             cannot find -ISDLmain

    ld.exe             cannot find -ISDL.dll

    Je précise à l'avance que les fichiers que j'ai dl sont :

    SDL-1.2.15.tar.gz (le premier fichier que j'ai dl et essayé, pour ensuite utiliser les suivants)

    SDL -devel- 1.2.15-mingw32.tar.gz

    SDL-1.2.15-win32-x64.zip

    Après avoir suivis le cours original  https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/17117-installation-de-la-sdl

    J'ai suivis ce tuto https://openclassrooms.com/forum/sujet/tuto-installer-sdl-avec-codeblocks-sous-windows (sur lequel 

    Néanmoins toujours les mêmes problèmes (projet en c++ et erreur mentionner plus haut).

    J'ai aussi regarder cette solution https://openclassrooms.com/forum/sujet/passage-a-sdl-impossible-64239#r3048563 mais le problème était dû au fichier utiliser et comme préciser plus haut, je ne me suis pas trompé de fichier. 

    Je suis un débutant en C et ça ne m'étonnerai même pas si la solution était devant mes yeux et même dans les solutions que j'ai déjà regardé.

    Je m'excuse si il y a des fautes de frappes, je ne me suis pas vraiment relu, j'espère seulement pouvoir avancer dans ce cours. 

    Merci d'avance.

    -
    Edité par RomainMsiah 27 août 2021 à 16:09:57

    • Partager sur Facebook
    • Partager sur Twitter
      27 août 2021 à 16:40:07

      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

      • Partager sur Facebook
      • Partager sur Twitter
      ...
        27 août 2021 à 16:57:14

        Salut et merci de ta réponse,

        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.

        • Partager sur Facebook
        • Partager sur Twitter
          27 août 2021 à 18:14:01

          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é. 

          • Partager sur Facebook
          • Partager sur Twitter
          ...
            28 août 2021 à 14:40:40

            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. 

            -
            Edité par RomainMsiah 28 août 2021 à 14:56:34

            • Partager sur Facebook
            • Partager sur Twitter
              28 août 2021 à 14:57:05

              Ton erreur, c'est qu'il ne trouvent pas ces deux fichier : libSDLmain.a ,  libSDL.dll.a  tu les as bien copié dans ton dossier des lib ?
              • Partager sur Facebook
              • Partager sur Twitter
              ...
                28 août 2021 à 15:14:12

                Oui ils sont tous les deux dans C:\Program Files\CodeBlocks\MinGW\lib,

                mais c'est étrange qu'il ne trouve pas ces fichiers parce que mon erreur mentionne deux fichiers différents

                cannot find -ISDL

                cannot find -ISDL_main

                ces deux fichiers, SDL et SDL_main, sont des .h présent dans include, et non des .a.

                -
                Edité par RomainMsiah 28 août 2021 à 15:25:05

                • Partager sur Facebook
                • Partager sur Twitter
                  28 août 2021 à 15:32:20

                  RomainMsiah a écrit:

                  cannot find -ISDLmain

                  cannot find -ISDL.dll

                  Correspondes aux fichiers que je t'ai cité précédemment, libSDLmain.a  ,  libSDL.dll.a

                  RomainMsiah a écrit:

                  cannot find -ISDL

                  cannot find -ISDL_main

                  et ceux-ci à libSDL.a  et  libSDL_main.a  qui sont aussi des fichiers lib qui doivent ce trouver dans le dossier LIB.

                  C'est curieux que ce n'est plus les même fichiers ?



                  • Partager sur Facebook
                  • Partager sur Twitter
                  ...
                    28 août 2021 à 15:39:40

                    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.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 août 2021 à 15:42:25

                      Essais de les enlever des options du linker, tu verra bien si ça compile.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      ...
                        28 août 2021 à 15:47:26

                        j'ai essayé de de suivre un autre tuto: http://lazyfoo.net/SDL_tutorials/lesson01/windows/codeblocks/index.php

                        mais même problème et quand je les retirent du linker, l'erreur change et deviens:

                        undefined reference to 'WinMain'

                        -
                        Edité par RomainMsiah 28 août 2021 à 15:47:50

                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 août 2021 à 16:10:01

                          rouIoude a écrit:

                          Essais de les enlever des options du linker, tu verra bien si ça compile.

                          Pas tous ! juste ceux que tu n'as pas !



                          • Partager sur Facebook
                          • Partager sur Twitter
                          ...
                            28 août 2021 à 16:18:04

                            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
                            • Partager sur Facebook
                            • Partager sur Twitter
                              28 août 2021 à 16:34:52

                              Il faut que tu ais ceux qui corresponde au fichier que tu as ! 

                              RomainMsiah a écrit:

                              cannot find -ISDLmain

                              cannot find -ISDL.dll

                              Ceux là, ça te les a demandé, tu les as, c'est ceux la qui doivent être dans les option du linker !

                              au fait la première lettre après le tiret -lsdl... c'est pas un i mais un l (elle) !

                              • Partager sur Facebook
                              • Partager sur Twitter
                              ...
                                29 août 2021 à 13:39:28

                                RomainMsiah a écrit:

                                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). 

                                • Partager sur Facebook
                                • Partager sur Twitter
                                ...
                                  29 août 2021 à 13:45:27

                                  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

                                  -
                                  Edité par RomainMsiah 29 août 2021 à 13:46:27

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 août 2021 à 8:01:41

                                    RomainMsiah a écrit:

                                    Salut et merci de ta réponse,

                                    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.

                                    • Partager sur Facebook
                                    • Partager sur Twitter

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

                                      1 septembre 2021 à 10:52:35

                                      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é).



                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      ...

                                      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.
                                      • Editeur
                                      • Markdown