Partage

undefined reference to `TTF_Init'

Code::Block sous Windows

Sujet résolu
Le 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

Publicité
Le 5 avril 2012 à 2:47:16
Le 5 avril 2012 à 6:44:48

Bonjour,
As-tu mis le fichier SDL_ttf.dll dans le dossier de ton projet ???
Le 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"
louk : le chipoteur orthographique | Le nouveau site du zéro : Zeste de Savoir
Le 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!
Le 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>
Le 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.
Le 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.
louk : le chipoteur orthographique | Le nouveau site du zéro : Zeste de Savoir
Le 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.
Le 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...
louk : le chipoteur orthographique | Le nouveau site du zéro : Zeste de Savoir
Le 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
Le 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...
louk : le chipoteur orthographique | Le nouveau site du zéro : Zeste de Savoir

undefined reference to `TTF_Init'

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown