Partage
  • Partager sur Facebook
  • Partager sur Twitter

undefined reference to `TTF_Init'

Sujet résolu
    24 août 2014 à 11:49:26

    Bonjour, Bonsoir tous le monde,

    Je sais bien qu'il s'agit d'une erreur courante et probablement liée à l'installation mais j'ai refait l'installation une bonne dizaine de fois sans arriver a un résultat correct.

    J'utilise la SDL 1.2, SDL_image marche parfaitement et même fmod. J'ai mis la sdl1.2, sdl_image et sdl_ttf dans le même dossier, qui n'est pas dans le même que CodeBlocks (que j'utilise comme IDE).

    Mon include:

    #include "SDL/SDL.h"
    #include <SDL/SDL_image.h>
    #include <fmod.h>
    #include <SDL/SDL_ttf.h>

    J'ai placé le fichier SDL_ttf.h dans le même que SDL_image.h.

    et le fichier SDL_ttf.lib dans le même que SDL_image.lib.

    J'ai linké les deux fichiers depuis Projects > Build options > Linker settings. Je les ai donc logiquement trouvé dans le même dossier.

    Et pourtant: undefined reference to `TTF_Init' et toutes les autres fonction de la ttf pareilles...

    SVP dites moi quoi faire! Merci =)

    • Partager sur Facebook
    • Partager sur Twitter
      24 août 2014 à 12:02:43

      Bonjour,

      Je remarque déjà que dans l'include que tu nous présente , tu n'as pas mis SDL/SDL.h entre chevrons, mais entre guillemets. Si tu as procédé de même dans tes fichiers de code , je t'invite à corriger ceci (je ne sais pas si ça résoudra ton problème).

      -
      Edité par Warren79 24 août 2014 à 12:03:43

      • Partager sur Facebook
      • Partager sur Twitter

      Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

        24 août 2014 à 12:05:15

        J'ai changé et toujours le même problème.

        Si vous avez besoin de plus d'info dites moi lesquelles et où els trouver et je post ça.

        -
        Edité par Liquiid77 24 août 2014 à 12:09:24

        • Partager sur Facebook
        • Partager sur Twitter
          24 août 2014 à 12:09:30

          Re...

          Est-ce que tu as bien téléchargé SDLTTF en version 1.2 ? (il existe une version sdl_ttf 2.0 pour sdl 2.0)

          Sinon, regarde bien dans l'onglet Linker settings que tu as mentionné plus haut si le chemin 'linker' était bien pour ton projet global (et pas seulement pour 'Release' ou 'Debug' par exemple)

          -
          Edité par Warren79 24 août 2014 à 12:18:06

          • Partager sur Facebook
          • Partager sur Twitter

          Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

            24 août 2014 à 12:15:18

            Oui, j'ai téléchargé les fichier Binary de ttf 1.2 pour mon windows 64
            • Partager sur Facebook
            • Partager sur Twitter
              24 août 2014 à 12:37:53

              Tu as dans la fenêtre ouverte par 'Project >> BuildOptions' une colonne à gauche où tu as le nom de ton projet puis (généralement si tu ne fais pas de modifications à propos de ça) juste en-dessous 'Debug' et 'Release'. Clique sur le nom de ton projet (donc ni sur 'Debug ou 'Release' ) puis sur l'onglet 'Search directories' et verifie bien que tu as les mêmes chemins de répertoires que tous nous mentionnés dans ton tout premier post.

              En effet si tu compile en debug et que tu as renseigné les chemins de répertoire seulement pour Release , ça ne marchera pas.

              • Partager sur Facebook
              • Partager sur Twitter

              Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                24 août 2014 à 13:30:14

                J'ai bien mis les linkers dans le projet général.

                Et dans Search directories dans Compiler y a bien le dossier a part/include et dans Linker le même dossier /lib

                • Partager sur Facebook
                • Partager sur Twitter
                  24 août 2014 à 14:35:08

                  Tu as mis les fichiers DLL de sdl_ttf dans le repertoire de ton programme executable ??

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                    24 août 2014 à 15:13:11

                    Franchement, là, je comprends pas pourquoi ça ne veut pas marcher.o_O

                    Est-ce que les chemins (linker compil, etc..) sont du type relatif ? Parce que si tu as bougé le dossier de ton projet dans un autre répertoire, ça pourrait expliqué ton souci...(mais d'un autre côté SDL et SDL_image marchent bien, donc non en principe...)

                    -
                    Edité par Warren79 24 août 2014 à 15:15:38

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                      24 août 2014 à 15:15:38

                      Moi pareil, mais ça, c'était évident =p... Après y a un truc qui me chiffonne dans l’installation, la première archive a télécharger contient les dll a mettre dans le projet, mais le deuxième aussi a des dll et les même je crois...

                      -
                      Edité par Liquiid77 24 août 2014 à 15:17:28

                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 août 2014 à 15:38:57

                        Il y a l'archive pour les developpeurs :  DLLs + Headers + fichiers 'Lib' pour pouvoir créer des porgrammes utilisant sdl_ttf et l'archive avec seulement les DLLs pour pouvoir utiliser les programmes fonctionnant avec sdl_ttf. En fait les DLLs sont des fichiers contenant les fonctions de la bibliothèque (elles ne sont pas incluses dans ton programme) en format binaire.

                        Tu utilise bien windows avec codeblocks ? Tu n'est pas sous Linux ?

                        Est-ce que tu peux nous montrer ton code ? (ou bien le build log)

                        -
                        Edité par Warren79 24 août 2014 à 15:40:56

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                          24 août 2014 à 16:05:57

                          Je suis sous windows. Le build log:
                          -------------- Build: Debug in Squares (compiler: GNU GCC Compiler)---------------
                          mingw32-g++.exe -LC:\Users\FABIEN\Documents\fabien\fabien\SDL-1.2.15\lib -L"C:\Users\FABIEN\Documents\fabien\fabien\C++\SFML Projet\SFML-2.1\lib" -o bin\Debug\Squares.exe obj\Debug\editeur.o obj\Debug\Input.o obj\Debug\jeu.o obj\Debug\main.o   C:\Users\FABIEN\Documents\fabien\fabien\SDL-1.2.15\lib\libSDL.dll.a "C:\Program Files (x86)\FMOD SoundSystem\FMOD Programmers API Windows\api\lib\libfmodex.a" C:\Users\FABIEN\Documents\fabien\fabien\SDL-1.2.15\lib\libSDLmain.a C:\Users\FABIEN\Documents\fabien\fabien\SDL-1.2.15\lib\SDL_image.lib C:\Users\FABIEN\Documents\fabien\fabien\SDL-1.2.15\lib\SDL_ttf.lib C:\Users\FABIEN\Documents\fabien\fabien\SDL-1.2.15\lib\SDL_image.lib C:\Users\FABIEN\Documents\fabien\fabien\SDL-1.2.15\lib\SDL_ttf.lib
                          obj\Debug\jeu.o: In function `launchGame':
                          C:/Users/FABIEN/Documents/fabien/fabien/C/Squares/jeu.c:22: undefined reference to `TTF_Init'
                          C:/Users/FABIEN/Documents/fabien/fabien/C/Squares/jeu.c:24: undefined reference to `TTF_OpenFont'
                          C:/Users/FABIEN/Documents/fabien/fabien/C/Squares/jeu.c:86: undefined reference to `TTF_RenderText_Solid'
                          C:/Users/FABIEN/Documents/fabien/fabien/C/Squares/jeu.c:112: undefined reference to `TTF_CloseFont'
                          C:/Users/FABIEN/Documents/fabien/fabien/C/Squares/jeu.c:113: undefined reference to `TTF_Quit'
                          c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
                          collect2.exe: error: ld returned 1 exit status
                          Process terminated with status 1 (0 minute(s), 0 second(s))
                          6 error(s), 0 warning(s) (0 minute(s), 0 second(s))
                          C'est bizarre que il link ca: C:\Users\FABIEN\Documents\fabien\fabien\C++\SFML Projet\SFML-2.1\lib, c'est pas dans le projet... mais bon
                          • Partager sur Facebook
                          • Partager sur Twitter
                            25 août 2014 à 8:42:53

                            Comment as-tu procédé pour créer ton projet sous codeblocks , as-tu utilisé le template de code blocks (vu que tu utilise sdl 1.2 -- avec la 2.0 c'est différent) ?
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                              25 août 2014 à 18:23:17

                              J'ai utilisé le template. Justement ce template ne marche qu'avec la 1.2, c'est une des raisons pour laquelle je n'ai pas changé.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                25 août 2014 à 19:24:47

                                Il y a une ligne qui m'interpelle : "undefined reference to 'WinMAin@16" et après une rechercher sur Google j'ai trouvé ça (entre autres) :

                                http://fr.openclassrooms.com/forum/sujet/undefined-reference-to-winmain16039-68279

                                As-tu bien mis ta ligne du main comme ceci:

                                int main( int argc,  char *argv[] )


                                Maintenant je me souviens , je n'arrivais pas à compiler un projet SDL en C++ à cause de cette ligne du 'main'

                                -
                                Edité par Warren79 25 août 2014 à 19:26:26

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                                  25 août 2014 à 19:40:17

                                  Malheureusement j'ai déjà cette ligne identique =/ Mais je n'utilise la TTF que dans un fichier a part, relié au projet.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    25 août 2014 à 19:51:28

                                    Et tu as mis les entêtes <SDL/SDL_ttf> dans tout tes fichiers headers (*.h) et main.c ? Ou seulement dans le fichier à part  relié au projet ?

                                    Si tu pouvais poster juste le code de ton main.c ce serait bien aussi :-°

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                                      25 août 2014 à 20:38:29

                                      Seulement dans celui à part.

                                      Mon main:

                                      #include <stdlib.h>
                                      #include <stdio.h>
                                      #include <SDL/SDL.h>
                                      #include <SDL/SDL_image.h>
                                      #include "constantes.h"
                                      #include "Input.h"
                                      
                                      void launchGame(SDL_Surface*);
                                      void launchEditor(SDL_Surface*);
                                      int main(int argc, char *argv[])
                                      {
                                          SDL_Surface *ecran = NULL;
                                      
                                          SDL_Init(SDL_INIT_VIDEO);
                                          ecran = SDL_SetVideoMode(LARGEUR_ECRAN, HAUTEUR_ECRAN, 32, SDL_HWSURFACE);
                                          SDL_WM_SetCaption("Squares !", NULL);
                                          //MENU DE CHOIX
                                          SDL_Surface* imageMenu = NULL;
                                          SDL_Rect posMenu;
                                          posMenu.x = 0;
                                          posMenu.y = 0;
                                          imageMenu = IMG_Load("menu.jpg");
                                          int choix = 0;
                                          Input in;
                                          memset(&in, 0, sizeof(in));
                                          while(!choix && !in.quit)
                                          {
                                              UpdateEvents(&in);
                                              if(in.key[SDLK_KP1])
                                                  choix = 1;
                                              else if(in.key[SDLK_KP2])
                                                  choix = 2;
                                              SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                                              SDL_BlitSurface(imageMenu, NULL, ecran, &posMenu);
                                              SDL_Flip(ecran);
                                          }
                                           //FIN DU MENU DE CHOIX
                                          if(choix == 1)
                                          {
                                              launchGame(ecran);
                                          }
                                          else if(choix == 2)
                                          {
                                              launchEditor(ecran);
                                          }
                                          return EXIT_SUCCESS;
                                      }
                                      



                                      -
                                      Edité par Liquiid77 25 août 2014 à 20:39:39

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        25 août 2014 à 20:59:13

                                        Je ne comprends toujours pas pourquoi ça ne veut pas fonctionner...

                                        Je pense qu' il faudrait déjà résoudre la ligne suivante : (.text.startup+0xa7): undefined reference to `WinMain@16'


                                        Est-ce que tu as mis les #ifndef #define et #endif dans tes fichiers headers pour éviter l'inclusion répétée (là je tente un peu au hasard...).

                                        Sinon, est-ce que tu pourrais me montrer le code de jeu.c

                                        -Edit-

                                        Une fois j'avais eu un prpblème parce que mon fichier "macro_constantes.h" était mal composé (il manquait une accolade, un point virgule ou je ne sais trop quoi..) et j'avais des erreurs de compilateur qui n'étaient pas très explicite.

                                        Poste donc ton fichier de constantes aussi.

                                        -
                                        Edité par Warren79 25 août 2014 à 21:04:10

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                                          25 août 2014 à 22:08:14

                                          Oui j'ai mis les protections dans les headers.

                                          constantes.h:

                                          #ifndef CONSTANTE
                                          #define CONSTANTE
                                          
                                          #define LARGEUR_ECRAN 15*50
                                          #define HAUTEUR_ECRAN 15*40
                                          #define L_TILE 15
                                          #define L_PLAYER 12
                                          #define NB_TILE_W LARGEUR_ECRAN/L_TILE
                                          #define NB_TILE_H HAUTEUR_ECRAN/L_TILE
                                          #define NB_TILE NB_TILE_H*NB_TILE_W
                                          #define TWOPI       (2 * 3.14159)
                                          #define FOE_SPEED 0.5
                                          #define FOEC_SPEED 1
                                          #define NB_FOE_MAX 64
                                          #define GRAV 0.035
                                          #define RAYON_FOE 5
                                          #define RAYON_SCORE 5
                                          enum{UP, RIGHT, DOWN, LEFT};
                                          enum{VIDE, JOUEUR, MUR, SOL, PIEGE, SPAWNPOINT, FOES, FOEE, END, PORTAL1, PORTAL2, SCORE};
                                          #endif // CONSTANTE

                                           Edit: C'est pire qu'avant, je sais pas ce que j'ai touché mais toutes les fonctions SDL ont undefined reference maintenant...

                                          -
                                          Edité par Liquiid77 25 août 2014 à 22:27:28

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            26 août 2014 à 9:56:59

                                            Honnêtement, je pense que c'est la configuration de ton template qui fait foirer la compilation (parce que ton code il est correct et comme tu décrit ta démarche pour l'installation des bibliothèque là aussi c'est bon).

                                            Il vient d' où ton template (celui intégré à codeblocks ou d'un autre site ) ?

                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                                              26 août 2014 à 10:13:37

                                              Celui intégré, il a marché pour tout sauf pour SDL_ttf c'est bizarre... Mais vu que mon CB me fait d'autres bizarreries en ce moment, je pense tout désinstaller et réinstaller depuis le début. Mais j'ai peur de perdre mes projets et tout ca
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                26 août 2014 à 11:11:41

                                                Liquiid77 a écrit:

                                                Mais j'ai peur de perdre mes projets et tout ca

                                                Non si tu sauvegarde bien tes fichiers .c et .h et ton projet files dans un dossiers situer en dehors de l’emplacement de C::B tu ne perdra rien

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  26 août 2014 à 11:23:31

                                                  C' est déjà fait alors je vais tenté je vous préviens du résultat plus tard
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    26 août 2014 à 14:06:12

                                                    Ok j'ai tout réinstallé et maintenant ni SDL ni SDL_image ni SDL_ttf ne fonctionnent... J'ai pourtant tout relinké et suivi les instruction de m@teo à la lettre.

                                                    J'ai aussi changé dans settings -> Global variable les path pour la sdl

                                                    -
                                                    Edité par Liquiid77 26 août 2014 à 15:19:04

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      26 août 2014 à 15:34:02

                                                      J'ai refait un projet SDL où j'ai pu ré-indiquer la nouvelle direction de ma SDL, et j'ai importer tous mes fichiers. Maintenant SDL remarche mais TTF et image ne marchent toujours pas. 'undefined reference'
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        26 août 2014 à 17:07:47

                                                        Récapitulons (sauf la SDL à proprement parler qui marche bien).

                                                        SDL_image.h dans le répertoire ('chemin renseigné dans l'onglet compiler'/SDL/SDL_image.h) si tu fais #include <SDL/SDL.image.h>

                                                        sinon 'chemin renseigné dans l'onglet compiler'/SDL_image.h avec #include <SDL_image.h>

                                                        SDL_ttf.h : idem

                                                        Les dlls dans le répertoire de l'éxecutable (vérifier que 'working dir' dans 'Project >> Properties >>onglet 'build target' >> 'execution working dir' est le chemin ou se trouve les fichiers graphiques et les DLLs du projet.

                                                        Project >> Build options >> onglet 'search directories >> onglet 'compiler' (chemin des headers)

                                                        et onglet 'Linker' le chemin des libs

                                                        Voilà, il me semble que j'ai tout dit.

                                                        Edit--------------

                                                        Personnellement j'utilise la sdl 2.0. ----Il reste des fichiers à renseigner (pour la sdl 1.2) dans Project>> build options>>linker settings >> Link libraries que le template de code blocks pour sdl 1.2 rempli automatiquement

                                                        :-°

                                                        -
                                                        Edité par Warren79 26 août 2014 à 17:17:37

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                                                          26 août 2014 à 18:10:50

                                                          Les includes fonctionnent.

                                                          le working dir est bien le fichier du projet où j'ai déjà mis toutes les DLLs.

                                                          Dans search directories compiler j'ai bien le bon chemin finissant par SDL-1.2.15/include et pareil pour l'onglet linker: SDL-1.2.15/lib.

                                                          Et dans les options du linker j'ai rajouté SDL_image.lib et SDL_ttf.lib. Donc tous ce que tu as dis c'est bon =/

                                                          Aussi j'ai installé fmod, et ça s'est passé très bien. Peut-être parce que l'installation se fait directement dans MinGW ou parce que la lib est en .a et non .lib je sais pas...

                                                          PS: j'ai tout réinstallé dont codeblocks fmod sdl_image et sdl_ttf et rebelote: erreur undefined reference sur IMG_Load (sdl_image)  et TTF_Init (sdl_ttf)

                                                          -
                                                          Edité par Liquiid77 26 août 2014 à 18:11:47

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            27 août 2014 à 9:02:25

                                                            Salut, j'avais eu le meme problème que toi, donc je t'explique comme moi j'ai fait: j'ai créé un dossier "SDL" dans le dossier" codeblocks", mon dossier "SDL" comporte trois sous-dossiers que j'ai crées nommés "lib", "include" et "bin".

                                                            Dans "lib" il y a tous les "libMachin.a" et "SDL_Machin.lib", dans "include" bah tous les "SDL_Machin.h" (en faite j'ai deux sous-dossiers les include pour sdl et ceux pour fmod) et dans le "bin" j'ai tous les fichiers "machin.dll". voilà pour tout le principal (et tu peux y mettre tous les TTF, SDL_image, et même fmod du moment que tous les différents types de fichiers (.a/.lib, .h, et .dll) sont répartis dans les sous-dossiers comme je l'ai décrit plus tôt.)

                                                            Le plus important c'est quand tu vas dans settings->compiler moi je n'utilise pas de template j'ai carrément modifier l'option générale car j'utilise que la sdl ainsi tu peux créer un projet vide ça démarrera quand même la sdl bien comme il faut avec ttf, image et fmod etc..

                                                            donc dans le menu compiler tu vas dans "search directories", dans l'onglet "compiler" tu clique sur add et tu parcoures pour lier le dossier "include" contenu dans le dossier "SDL" lui même placé dans code:blocks du coup ça doit te donner une fois que tu as ajouté le dossier : C:\Program Files...\CodeBlocks\SDL\include, il faut que le chemin soit complet.

                                                            puis tu vas dans l'onglet "linker" juste à droite et là tu lies le dossier "lib" de la même manière que précédemment.

                                                            Enfin et c'est le plus important tu vas dans "linker setting" et il faut que ça ressemble à ça :

                                                            Pour être sur de toi si ça ressemble pas à la capture supprime tous les liens que tu as et fais comme ça: ajoute les fichiers .lib utiles, donc pour toi j'imagine que tu vas lier le SDL_ttf.lib qui se trouve comme la photo l'indique dans mon dossier "lib" puis tu ajoutes "mingw32", tu écris juste mingw32 et tu fais ok, puis tu ajoute "SDLmain" en écrivant simplement SDLmain et enfin tu ajoutes "SDL.dll" comme tu peux le voir ces trois derniers fichiers n'ont pas de chemin tu écris juste leur noms c'est important, et tu dois RESPECTER L'ORDRE c'est extrèmement important, ça doit ressembler à ma capture d'écran ok?

                                                            Voilà normalement ça fonctionnera tranquille. L'include tu l'écris #include<SDL/SDL_machin.h> si dans le dossier "include" comme moi tu as mis un sous-dossier "SDL" et un sous-dossier "fmodex".

                                                            et quand tu télécharge ttf ça ne se voit pas mais sur le site il y a un petit lien SDL_ttf for 1.2 clique dessus car même si tous les fichiers téléchargeables sont toujours en 2.0 et que t'as l'impression que c'est la même chose en faite leurs contenus ont changé et ça c'est le bon ttf.

                                                            Voilà mais j'insiste sur l'ordre des liens d'abord le chemin complet qui mene vers ttf.lib puis mingw32 puis SDLmain puis SDL.dll car sinon tu auras l'erreur du "Winmain" et bien sur n'oublies pas d'inclure les dll dans ton dossier de ton programme.

                                                            Cordialement bonne chance^^

                                                            -
                                                            Edité par edgeoflight 27 août 2014 à 9:06:23

                                                            • 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