Partage
  • Partager sur Facebook
  • Partager sur Twitter

Code Blocks - Problème de références

Projet SDL 1.2

Sujet résolu
    4 janvier 2017 à 11:26:50

    Bonjour au forum,

    Je rencontre un problème visiblement connu. mais sans solution (cf. lien1, lien2): Lorsque je compile un simple projet (contenant uniquement un fichier main.c) avec plusieurs fonctions, pas de problème, tout fonctionne. Dès que je déplace une fonction dans un autre fichier (dans mon cas vers libInit.c), un message d'erreur apparaît lors de la compilation: "undefined reference to 'LibInit()'" et "error: ld returned 1 exit status".

    Si je reprend ladite fonction (LibInit()) dans main.c, plus de problème.

    Il me semble que l'include de libInit est correctement faite dans main.c. De plus, les fichiers .c & .h sont faits "d'après les normes"...

    Je me base sur un projet de base SDL 1.2. Celui-ci n'affiche donc que le logo de Code Blocks et rien de plus. Je joins également les différents codes de mon programme.

    main.c

    #ifdef __cplusplus
        #include <cstdlib>
    #else
        #include <stdlib.h>
    #endif
    
    #include <SDL/SDL.h>
    //#include <SDL/SDL_image.h>
    
    //#include "constances.h"
    #include "libInit.h"
    
    
    int main ( int argc, char** argv )
    {
        SDL_Surface* screen = NULL;
    
        LibInit();
    
        // create a new window
        screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
    
        if (screen == NULL)
        {
            fprintf(stderr, "%s - %s, line %d: Unable to set 640x480 video: %s\n", __DATE__, __TIME__, __LINE__, SDL_GetError());
            return 1;
        }
    
        // load an image
        SDL_Surface* bmp = SDL_LoadBMP("cb.bmp");
        if (bmp == NULL)
        {
            fprintf(stderr, "%s - %s, line %d: Unable to load bitmap: %s\n", __DATE__, __TIME__, __LINE__, SDL_GetError());
            return 1;
        }
    
        // centre the bitmap on screen
        SDL_Rect dstrect;
        dstrect.x = (screen->w - bmp->w) / 2;
        dstrect.y = (screen->h - bmp->h) / 2;
    
        // program main loop
        bool done = false;
        while (!done)
        {
            // message processing loop
            SDL_Event event;
            while (SDL_PollEvent(&event))
            {
                // check for messages
                switch (event.type)
                {
                    // exit if the window is closed
                case SDL_QUIT:
                    done = true;
                    break;
    
                    // check for keypresses
                case SDL_KEYDOWN:
                    {
                        // exit if ESCAPE is pressed
                        if (event.key.keysym.sym == SDLK_ESCAPE)
                            done = true;
                        break;
                    }
                } // end switch
            } // end of message processing
    
            // DRAWING STARTS HERE
    
            // clear screen
            SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0));
    
            // draw bitmap
            SDL_BlitSurface(bmp, 0, screen, &dstrect);
    
            // DRAWING ENDS HERE
    
            // finally, update the screen 
            SDL_Flip(screen);
        } // end main loop
    
        // free loaded bitmap
        SDL_FreeSurface(bmp);
    
        return EXIT_SUCCESS;
    }
    

    libInit.c

    #include <SDL/SDL.h>
    
    #include "libInit.h"
    //#include "constances.h"
    
    void LibInit(void)
    {
        // initialize SDL video
        if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
        {
            fprintf(stderr, "%s - %s - Unable to init SDL: %s\n", __DATE__, __TIME__, SDL_GetError() );
            exit(EXIT_FAILURE);
        }
    
        // make sure SDL cleans up before exit
        atexit(SDL_Quit);
    }
    

    libInit.h

    #ifndef _LIBINIT_H
    
    #define _LIBINIT_H
    
        void LibInit(void);
    
    #endif // _LIBINIT_H
    



    La structure de mon projet dans C::B:

    Project structure

    D'avance merci pour votre aide.

    Amicalement,

    Gub

    -
    Edité par Gub156 4 janvier 2017 à 11:29:59

    • Partager sur Facebook
    • Partager sur Twitter
      4 janvier 2017 à 16:14:41

      Salut,

      Remplace ton main.cpp par main.c. Pour ça, tu peux le renommer ou créer un fichier main.c dans ton projet, copier le contenu de main.cpp dedans et supprimer main.cpp.

      • Partager sur Facebook
      • Partager sur Twitter
      Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
        5 janvier 2017 à 18:46:33

        Salut yo@n97one,

        C'est tellement simple que j'ai du mal à croire que personne sur le net n'aie pu donner une réponse jusqu'à maintenant... 

        Dans tous les cas, merci pour ton aide qui va me simplifier la vie... Toutes les fonctions dans main.c, c'est pas vraiment un exemple de lisibilité...

        Amicalement,

        Gub

        • Partager sur Facebook
        • Partager sur Twitter
          6 janvier 2017 à 2:25:30

          C'est tellement simple que j'ai du mal à croire que personne sur le net n'aie pu donner une réponse jusqu'à maintenant...

          Tu n’as pas du tomber sur les bons résultats de recherche, on résout ce problème régulièrement sur le forum C.

          Toutes les fonctions dans main.c, c'est pas vraiment un exemple de lisibilité...

          C’est vrai que c’est pas le mieux. Surtout quand le projet commence à devenir un peu conséquent…

          Bonne continuation. :)

          • Partager sur Facebook
          • Partager sur Twitter
          Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs

          Code Blocks - Problème de références

          × 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