Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] Problème de Linker

Sujet résolu
    18 juin 2006 à 15:40:36

    Bonjour à tous les Zér0s!
    Je suis nouveaux parmi vous sur le forum alors que je suis les tutos depuis pas mal de temps (merci Matéo).

    Voilà, j'ai entamé le tuto sur la librairie SDL mais je me retrouve avec un simple problème que je n'arrive pas à résoudre car je ne maitrise pas assez bien mon IDE.

    J'utilise Visual C++ 6.0.

    Mon problème est que je manque de pratique quant aux propriétés d'un projet. Ce qui fait que configurer le linker, cela me passe à côté :s

    J'ai effectué pas mal de recherche sur le forum mais je n'ai pas trouvé de posts où l'on recence mon problème (tel que le mien).
    Pour prouver ma bonne fois, j'ai trouvé des problèmes simillaires ici:

    Un
    Deux
    Trois

    Voilà, j'aimerai utiliser SDL_Image pour utiliser les formats autres que bmp.
    Alors j'ai bien installé sdl_image.h, sdl_image.bin et les dll se trouvent bien dans le répertoire de mon projet.

    Je configure bien le linker tel qu'ici:
    Image utilisateur


    J'aimerai faire un genre de tetris pour m'entraîner.
    Voici mon code actuel:

    #include <stdlib.h>
    #include <stdio.h>
    #include "SDL/SDL.h"
    #include "SDL/SDL_image.h"


    int main(int argc, char *argv[])
    {
       SDL_Surface *fond = NULL;
       SDL_Surface *cadre = NULL;
       SDL_Rect positionCadre;

       int continuer = 1;
       SDL_Event event;

       positionCadre.x = (800/2) - (256/2);
       positionCadre.y = (800/2) - (256/2);


       /* startup SDL */
            if(SDL_Init(SDL_INIT_VIDEO)==-1)
            {
                    printf("SDL_Init: %s\n", SDL_GetError());
                    return 1;
            }

       fond = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
       SDL_WM_SetCaption("SDLTetris", NULL);

       SDL_FillRect(fond, NULL, SDL_MapRGB(fond->format, 0, 0, 0));

       cadre = SDL_Load("brick.gif");
       SDL_BlitSurface(cadre, NULL, fond, &positionCadre);
       
       SDL_Flip(fond);

       while (continuer)
       {
           SDL_WaitEvent(&event);
           switch(event.type)
           {
               case SDL_QUIT:
                   continuer = 0;
           }
       }
       
       SDL_FreeSurface(cadre);
       SDL_Quit();
       return EXIT_SUCCESS;
    }




    A la compilation, voilà ce que j'ai:
    Compiling resources...
    Compiling...
    main.c
    g:\mes documents\mes programmes\sdltetris\sdltetris\main.c(32) : warning C4013: 'SDL_Load' undefined; assuming extern returning int
    g:\mes documents\mes programmes\sdltetris\sdltetris\main.c(32) : warning C4047: '=' : 'struct SDL_Surface *' differs in levels of indirection from 'int '
    Linking...
    main.obj : error LNK2001: unresolved external symbol _SDL_Load
    Debug/SDLTetris.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.

    SDLTetris.exe - 2 error(s), 2 warning(s)


    Je ne sais pas comment bien configurer mon linker, si j'ai mal, où j'ai mal fait.
    Pour ça, je suis un peu paumé :-°


    Merci d'avance à vous pour le coup de main ^^
    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2006 à 15:55:10

      Déjà les erreurs C4013 et C4047 font référence à des erreurs de compilation (et non de linker pour des deux la du moins)

      Concernant C4013 :
      Es-tu sûr d'avoir inclut les bons fichiers headers ?
      Je pense que le problème vient de la pour ces 2 warning.
      Pour le résoudre, inclu les headers adéquats dans tes sources et rajoute le dossier correspondant dans la liste des dossier include dans les propriétés de ton projet.

      Concernant C4047
      La c'est une erreur de syntaxe (type) apparement.

      Concernant LNK1120
      C'est effectivement une erreur de linker.
      Je pense que tu as inclu les bons fichier *.lib.
      Cependant il faut aussi spécifier au compilateur dans quel dossier se trouvent ces fichiers *.lib.
      Cherche dans les options de projet relatives au linker le champ "répertoires de bibliothèques supplémentaires" ou "external dependencies" et ajoute le dossier adéquat.
      • Partager sur Facebook
      • Partager sur Twitter
        18 juin 2006 à 16:04:27

        Dans mon arborescence de projet, je n'avais pas inclus les fichiers sdl.h et sdl_image.h comme headers files car ce n'est pas nécessaire.
        Cependant j'ai essayé, en modifiant mon code:
        #include <stdlib.h>
        #include <stdio.h>
        #include "SDL.h"
        #include "SDL_image.h"


        Et ce n'est pas bon.

        Pour le linker, j'ai ajouté le chemin où se trouve les lib (C:\Program Files\Microsoft Visual Studio\VC98\Lib) dans "Additionnal librairy path" mais cela ne change rien :(

        Merci pour ton aide ;)



        *edit*

        Comme le dit Thedownloader ici, je dois faire cela sous mon IDE pour résolver ce problème.
        Quelqu'un peut-il me guider sous Visual C++ 6.0 ?
        Merci bien.
        • Partager sur Facebook
        • Partager sur Twitter
          19 juin 2006 à 9:49:43

          Bon, j'ai essayé avec Code::Blocks en suivant bien la manipulation (donc pas d'erreurs possibles, c'est tout bon).

          Même problème, il ne veut pas me compiler car il ne sait pas ce qu'est SDL_Load.


          Please, que quelqu'un puisse m'aider je vous en prie :)



          PS: J'aurai dû nommé ce topic: "Pas foutu d'installer une libraire SDL" j'aurai eu plus de visite :D
          • Partager sur Facebook
          • Partager sur Twitter
            19 juin 2006 à 10:16:49

            #include <stdlib.h>
            #include <stdio.h>
            /* ce sont des header internes donc entre <> et pas "" */
            #include "SDL.h"
            #include "SDL_image.h"
            /* et il me semble que c'est <SDL\SDL.h> et <SDL\SDL_image.h> en plus */




            SDL_Load("brick.gif"); /* normal que ca pose probleme : c'est SDL_LoadBMP ou IMG_Load, il faut choisir  */
            • Partager sur Facebook
            • Partager sur Twitter
              19 juin 2006 à 10:31:27

              Mouarf... c'était effectivement: IMG_Load
              J'aurai dû m'acheter des lunettes... Je suis navré, je mets comme résolu.

              Encore désolé, et merci à toi le_physicien !
              • Partager sur Facebook
              • Partager sur Twitter

              [SDL] Problème de Linker

              × 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