IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Installation SDL_Image, SDL_TTF


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut Installation SDL_Image, SDL_TTF
    Bonsoir a tous,
    J'ai un petit soucis avec SDL en faite je suis encore débutant et j'essaye d'installer cette bibliotheque et ses Add-on, (Sous UBUNTU).
    J'ai suivi le tuto de LOKA sur developpez.net, mais j'ai encore un petit probleme.
    Le voila :
    Lors de la compilation du premier code, CodeBlocks, sous ubuntu ne reconnais pas IMG_Load(), et voila le code source accompagné par l'erreur affichée.

    Code application : (correct celui de LOKA)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    /*******************************************************/
    /** Programme de PERRUCHON Romain pour developpez.com **/
    /**               Chapitre V : SDL_TTF                **/
    /*******************************************************/
     
    //Les fichiers d'entête
    #include "SDL/SDL.h"
    #include "SDL/SDL_image.h"
    #include "SDL/SDL_ttf.h"
    #include <string>
     
    //Les attributs de l'ecran (640 * 480)
    const int SCREEN_WIDTH = 640;
    const int SCREEN_HEIGHT = 480;
    const int SCREEN_BPP = 32;
     
    //Les surfaces
    SDL_Surface *background = NULL;
    SDL_Surface *message = NULL;
    SDL_Surface *screen = NULL;
     
    //La structure d'evenement
    SDL_Event event;
     
    //Le font qu'on va utiliser
    TTF_Font *font;
     
    //La couleur du font
    SDL_Color textColor = { 255, 255, 255 };
     
    SDL_Surface *load_image( std::string filename )
    {
        //L'image qui est chargée
        SDL_Surface* loadedImage = NULL;
     
        //L'image optimisée que nous utiliserons par la suite
        SDL_Surface* optimizedImage = NULL;
     
        //Chargement de l'image
        loadedImage = IMG_Load( filename.c_str() );
     
        //Si l'image est chargée correctement
        if( loadedImage != NULL )
        {
            //creation de l'image optimisée
            optimizedImage = SDL_DisplayFormat( loadedImage );
     
            //liberation de l'ancienne image
            SDL_FreeSurface( loadedImage );
     
            //si l'image optimisée créé est bonne
            if( optimizedImage != NULL )
            {
                //transparence
                SDL_SetColorKey( optimizedImage, SDL_RLEACCEL | SDL_SRCCOLORKEY, SDL_MapRGB( optimizedImage->format, 0, 0xFF, 0xFF ) );
            }
        }
     
        //on retourne l'image optimisé
        return optimizedImage;
    }
     
    void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL )
    {
        SDL_Rect offset;
     
        offset.x = x;
        offset.y = y;
     
        //on blit la surface
        SDL_BlitSurface( source, clip, destination, &offset );
    }
     
    bool init()
    {
        //initialisation de tout les sous-systemes de sdl
        if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
        {
            return false;
        }
     
        //on met en place l'ecran
        screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
     
        //Si il y a une erreur lors de la mise en place de l'ecran
        if( screen == NULL )
        {
            return false;
        }
     
        //Initialisation de SDL_ttf
        if( TTF_Init() == -1 )
        {
            return false;
        }
     
        //on met en place la barre caption de la fenetre
        SDL_WM_SetCaption( "TTF Test", NULL );
     
        //si tout s'est bien passé
        return true;
    }
     
    bool load_files()
    {
        //chargement du fond
        background = load_image( "background.png" );
     
        //Ouverture du font
        font = TTF_OpenFont( "CaslonBold.ttf", 28 );
     
        //si il y a un probleme au chargement du fond
        if( background == NULL )
        {
            return false;
        }
     
        //Si il y a une erreur au chargement du font
        if( font == NULL )
        {
            return false;
        }
     
        //Si tout s'est bien passé
        return true;
    }
     
    void clean_up()
    {
        //Liberation des surfaces
        SDL_FreeSurface( background );
        SDL_FreeSurface( message );
     
        //On ferme le font qu'on a utilisé
        TTF_CloseFont( font );
     
        //On quitte SDL_ttf
        TTF_Quit();
     
        //On quitte SDL
        SDL_Quit();
    }
     
    int main( int argc, char* args[] )
    {
        //ce qui va nous permettre de quitter
        bool quit = false;
     
        //Initialisation
        if( init() == false )
        {
            return 1;
        }
     
        //Chargement des fichiers
        if( load_files() == false )
        {
            return 1;
        }
     
        //application du texte
        message = TTF_RenderText_Solid( font, "Test pour sdl_ttf", textColor );
     
        //Si il y a une erreur lors de l'application du texte
        if( message == NULL )
        {
            return 1;
        }
     
        //Application des surfaces(images) sur l'ecran
        apply_surface( 0, 0, background, screen );
        apply_surface( 200, 200, message, screen );
     
        //mise à jour de l'ecran
        if( SDL_Flip( screen ) == -1 )
        {
            return 1;
        }
     
        //Tant que l'utilisateur n'a pas quitter
        while( quit == false )
        {
            //tant qu'il y a un evenement dans le handler
            while( SDL_PollEvent( &event ) )
            {
                //Si l'utilisateur ferme la fenetre avec le X
                if( event.type == SDL_QUIT )
                {
                    //On quitte le programme
                    quit = true;
                }
            }
        }
     
        //liberation des surface et on quitte sdl
        clean_up();
     
        return 0;
    }
    Erreur retournée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/wadjo/Documents/Mes programmes C-Ubuntu/SdlTest1/main.cpp|40|undefined reference to `IMG_Load'|
    Merci de m'orienter vers une solution.

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Si la lib est bien installer tu as mis le mauvais 'include'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include "SDL/SDL.h"
    #include "SDL/SDL_image.h"
    #include "SDL/SDL_ttf.h"
    alors qu'il faut écrire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    les guillemets signifie que dans SDL/SDL.h ce trouve dans le répertoire courant du projet , alors que les '<' ,'>' signifie que c'est une lib (et les include ne se trouve pas dans le répertoire courant)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Merci tout d'abord pour cette réponse rapide.
    Mais ça n'a pas résolu le problème, j'ai changé comme vous avez mentionné.

    Bon en faisant des recherches, c'est peut être du a un problème de "link", en faite je développe sous CodeBlocks, sous Ubuntu, j'ai installé les bibliothèques mais je n'ai rien fait d'autre.
    Comment linker (si c'est la source du problème comme disent quelques uns) ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    J'ai réussi a trouvé le problème.

    projet/build options
    aller dans "linker settings"

    ajouter :
    /usr/lib/libSDL*.a
    /usr/lib/libSDL*.so

    En espérant que ça aide certains, merci Kannagi .

  5. #5
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    J'avais supposé que tu avais fait les links ^^'

    ben problème résolu alors =)

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    L'erreur était bien une erreur de l'éditeur de liens. Du coup, c'est qu'il ne trouvait pas le code de la fonction. Les erreurs qui apparaissent lorsqu'il manque les headers sont différentes (il indique qu'il ne connait pas le symbole / la fonction "functionName").

    J'avoue qu'au début c'est un peu difficile
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Oui vraiment vu le code d'erreur, et compte tenu que je débute, ca m'a couté beaucoup de temps avant de trouver la solution sur ce forum.
    Et du fait, ya pas une solution pour ne pas éditer les liens pour chaque projet crée ?
    (un lien unique pour tous les projets codeblocks).

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    On peut alors utiliser un patron de projet (project template) dans Code::Blocks. Mais une fois que l'on connait comment cela fonctionne, ça prend 10 minutes maximum de tout configurer
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Merci, mais je ne connais pas la procédure.
    Bon par ignorance et avec un peu de manipulation j'ai ajouté les mêmes lignes à :
    Setting->Compiler And Debugger, dans la fenêtre de codeBloks et ca marche, ( enfin momentanément )

  10. #10
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Sauf qu'avec cette dernière solution, la bibliothèque sera toujours liée dans le programme ... même lorsque cela n'est pas utile ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    J'avoue, vous n'avez pas tord.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Débuter avec un projet SDL
    Par kaamelotte dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 09/09/2014, 22h41
  2. SDL 1.2 + SDL_Image + SDL_TTF Template pour Visual Studio 2008
    Par LittleWhite dans le forum Contribuez
    Réponses: 0
    Dernier message: 10/05/2013, 13h31
  3. SDL 1.2 + SDL_Image + SDL_TTF Template pour Code::Blocks
    Par LittleWhite dans le forum Contribuez
    Réponses: 0
    Dernier message: 10/05/2013, 13h26
  4. Réponses: 7
    Dernier message: 02/10/2010, 15h31
  5. installation li SDL_ttf
    Par kris1 dans le forum SDL
    Réponses: 3
    Dernier message: 14/12/2007, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo