Partage
  • Partager sur Facebook
  • Partager sur Twitter

undefined reference to `TTF_Init'

Code::Block sous Windows

Sujet résolu
    5 avril 2012 à 2:47:16

    Bonsoir à tous,

    Je suis en train de faire un petit projet perso en SDL sur Code::Block, et lorsque j'ai tenté d'initialiser la SDL_TFF, j'obtiens l'erreur suivante :

    undefined reference to `TTF_Init'


    Après avoir passé deux jours à fouiller sur le let et ici, à linker et relinker les librairies, à désinstaller et à réinstaller le tout, à redémarrer mon ordinateur, le même message d'erreur apparaît inévitablement.

    J'ai mis en commentaire tout le code relatif à la bibliothèque TTF et tout compile sans problèmes. Mais dès que j’écris la ligne de code d'initialisation, l'erreur réapparaît. De plus, la SDL_image est installée de la même manière et elle fonctionne.

    J'ai vraiment besoin de votre aide,

    Merci,

    Jomialsipi


    main.cpp
    #include "preprocess.h"
    #include "base_functions.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL;
        bool sortir(false);
    
        if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) == -1) // Démarrage de la SDL. Si erreur alors...
        {
            fprintf(stderr, "Erreur d'initialisation de la SDL : %s\n", SDL_GetError()); // Ecriture de l'erreur
            exit(EXIT_FAILURE); // On quitte le programme
        }
    
        ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_NOFRAME | SDL_DOUBLEBUF);
        if (ecran == NULL) // Si l'ouverture a échoué, on écrit l'erreur et on arrête
        {
            fprintf(stderr, "Impossible de charger le mode vidéo : %s\n", SDL_GetError());
            exit(EXIT_FAILURE);
        }
    
        SDL_WM_SetCaption(WINDOWS_NAME, NULL);
        SDL_WM_SetIcon(IMG_Load("images/icon.png"), NULL);
    
        SDL_ShowCursor(SDL_DISABLE);
    
        TTF_Init();
    
        sortir = title(ecran);
    
        if(!sortir) toMenu(ecran);
    
        TTF_Quit();
        SDL_Quit();
        return EXIT_SUCCESS;
    }
    


    preprocess.h
    #include <stdlib.h>
    #include <stdio.h>
    #include <iostream>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    
    #define HAUTEUR_FENETRE 480
    #define LARGEUR_FENETRE 640
    #define WINDOWS_NAME "Zelda"
    #define SLOT_SPACING 20
    #define NBSAVE 3
    
    #define MAUVE SDL_MapRGB(ecran->format, 95, 0, 190)
    #define BLANC SDL_MapRGB(ecran->format, 255, 255, 255)
    #define NOIR SDL_MapRGB(ecran->format, 0, 0, 0)
    
    // Définition des contrôles de jeu
    #define HAUT SDLK_UP
    #define BAS SDLK_DOWN
    #define GAUCHE SDLK_LEFT
    #define DROITE SDLK_RIGHT
    #define CARTE SDLK_LSHIFT
    #define SAC SDLK_c
    #define EPEE SDLK_SPACE
    #define ITEM1 SDLK_a
    #define ITEM2 SDLK_w
    #define ITEM3 SDLK_d
    #define ENTER SDLK_RETURN
    #define SORTIE SDLK_ESCAPE
    

    • Partager sur Facebook
    • Partager sur Twitter
      5 avril 2012 à 6:44:48

      Bonjour,
      As-tu mis le fichier SDL_ttf.dll dans le dossier de ton projet ???
      • Partager sur Facebook
      • Partager sur Twitter
      Librairie, une sorte de "SDL", site web en construction, librairie v1.0 terminée
        5 avril 2012 à 8:56:59

        Bonjour tout le monde !

        Si le fichier SDL_ttf.dll manquait, il ne mettrais pas cette erreur, il lancerais le programme puis afficherais une erreur du style:

        Cette application n'a pas pu démarrer car SDL_ttf.dll est intouvable. La réinstallation de cette application peut corriger ce problème.


        Ce genre d'erreur m'est souvent arrivé.
        Donne le chemin où est installé la lib de SDL_ttf (SDL_ttf.lib) et ce que tu vois dans :

        menu "Project" -> "Build options..."
        puis onglet "Linker settings"
        Donne aussi ce que tu vois dans chaque onglet situés dans "Search directories"
        • Partager sur Facebook
        • Partager sur Twitter
          5 avril 2012 à 17:53:19

          Ma lib se trouve dans C:\Program Files (x86)\CodeBlocks\SDL-1.2.15\lib, soit juste à côté de celle de SDL_image. Et bien sur que ma dll est dans le fichier.

          Dans mes "Link libraries", j'ai les librairies suivantes :
          mingw32
          SDLmain
          SDL.dll
          user32
          gdi32
          winmm
          dxguid

          Ensuite, dans "Other linker options" :
          -lSDL
          -lSDLmain
          -lSDL_image
          -lSDL_ttf


          Dans mon onglet "Search directories"

          Dans le sous-onglet "Compiler"
          J'ai le chemin d'accès à mon dossier include de la SDL

          Dans le sous-onglet "Linker"
          J'ai le chemin d'accès au dossier lib de la SDL

          Dans le sous-onglet "Ressource compiler"
          Il n'y a rien.


          Merci de prendre le temps d'essayer de m'aider!
          • Partager sur Facebook
          • Partager sur Twitter
            5 avril 2012 à 20:24:52

            Salut,
            Essaye de changer la position de TTF_Init.
            Il me semble que j'avais eu des problèmes similaires lors de ma première utilisation de cette lib.

            SDL_Init(SDL_INIT_VIDEO);
            TTF_Init();
            ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
            


            J'ai retrouvé un bout de code (fonctionnel) où je l'avais foutu là (entre SDL_Init et SetVideoMode).

            EDIT : vérifie aussi que tu as bien le :
            #include <SDL_ttf.h>
            
            • Partager sur Facebook
            • Partager sur Twitter
              5 avril 2012 à 20:36:35

              La SDL_ttf.h est inclue, tel qu'écrit dans le code que j,ai publié en haut.
              Et non le changement de position de l'initialisation de la ttf ne change rien au problème...

              EDIT : En réinstallant la SDL_ttf pour le nieme fois, et en surfant entre les différents fichier, j'ai fini par régler le problème. Désolé de vous avoir fait perdre votre temps.
              • Partager sur Facebook
              • Partager sur Twitter
                6 avril 2012 à 13:46:06

                ^^ Ne t'inquiète pas, si on répond, c'est qu'on a choisie de prendre le temps

                Pourrais-tu indiquer ce qui a résolu ton problème ? Ca permettrais à ceux qui ont le même problème de pouvoir le résoudre en lisant ce topique.
                • Partager sur Facebook
                • Partager sur Twitter
                  6 avril 2012 à 16:49:34

                  Je ne suis pas sur à 100%, mais je crois que j'avais pris le version X64 de la librairie alors qu'il me fallais la X86. Il y a 3 librairies et 4 sets de dll. Il suffit de prendre la bonne combinaison. Si vous avez un problème du genre, essayer toutes les combinaisons possible, vous allez finir par tomber sur la bonne.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 avril 2012 à 22:40:57

                    Oui, effectivement, c'est ça, je viens d'avoir le même problème il y a une semaine, mais j'y ai même pas pensé ^^

                    Il me semble que x64 est pour ceux qui ont un ordi 64 bits...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 avril 2012 à 17:58:18

                      Ce qui m'as mélangé c'est que le nom de mon dossier Program Files c'est Program Files X86
                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 avril 2012 à 22:42:00

                        Ah oui, j'ai remarqué aussi que sur seven (pas tous apparemment, parce que chez moi, ça le fait pas), il y a deux dossiers : Program Files et Program Files x86.
                        Je sais pas trop pourquoi : les x86 serait ceux qui n'ont pas un 64 bits, sauf que chez moi je n'ai pas ce dossier et j'ai un 32 bits.
                        Si jamais quelqu'un aurait une explication...
                        • Partager sur Facebook
                        • Partager sur Twitter

                        undefined reference to `TTF_Init'

                        × 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