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

SFML Discussion :

[SFML] Encapsulation - Undefined reference


Sujet :

SFML

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [SFML] Encapsulation - Undefined reference
    Bonjours,

    J'effectue actuellement une encapsulation de la SFML 2.0 dans le but des developpers des jeux videos en equipe d'une facon la plus modulable possible. Je compile donc cette encapsulation dans une librairie dynamique afin de ne pas avoir a tout recompiler a chaque make re.
    Je vous precises que je travail sous linux.
    Le probleme c'est que je me rencontre a des undefined reference lorsque je veut compiler avec ma librairie.

    Voici les erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ./Lib/libEngine-GDL.so: undefined reference to `EGDL::SFML::Time::setTime(sf::Time&)'
    ./Lib/libEngine-GDL.so: undefined reference to `EGDL::SFML::Time::~Time()'
    ./Lib/libEngine-GDL.so: undefined reference to `EGDL::SFML::Time::Time()'
    On peut voir que tout se situe dans Time. Je vous passe le code :

    Interface ITime :

    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
    #ifndef ITIME_HPP_
    # define ITIME_HPP_
     
    namespace EGDL
    {
    class ITime
    {
    public:
      virtual float	asSeconds() const = 0;
      virtual int	asMilliseconds() const = 0;
      virtual int asMicroseconds() const = 0;
    };
    }
     
    #endif
    Class Header Time

    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
    #ifndef SFMLTIME_HPP_
    # define SFMLTIME_HPP_
     
    # include "ITime.hpp"
    # include <SFML/System.hpp>
     
    namespace EGDL
    {
    namespace SFML
    {
    class Time : public ITime
    {
    public:
      explicit Time();
      virtual ~Time();
      float	asSeconds() const;
      int	asMilliseconds() const;
      int	asMicroseconds() const;
      void	setTime(sf::Time &time);
      void *getTime();
      Time	&operator=(Time &right);
      Time &operator+=(Time &left);
      Time &operator-=(Time &left);
     
    private:
      sf::Time	_time;
    };
     
    //Operators for Time
    bool operator==(Time &left, Time &right);
    bool operator!=(Time &left, Time &right);
    bool operator<(Time &left, Time &right);
    bool operator>(Time &left, Time &right);
    bool operator<=(Time &left, Time &right);
    bool operator>=(Time &left, Time &right);
    Time operator+(Time &left, Time &right);
    Time operator-(Time &left, Time &right);
    }
     
    namespace TIME
    {
      EGDL::SFML::Time milliseconds(double time);
      EGDL::SFML::Time seconds(double time);
      EGDL::SFML::Time microseconds(double time);
      void sleep(EGDL::SFML::Time time);
    }
    }
     
    #endif
    Class Source Time

    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
    #include <iostream>
    #include "SFMLTime.hpp"
     
    using namespace std;
     
    namespace EGDL
    {
    namespace SFML
    {
    Time::Time()
    {
    }
     
    Time::~Time() {}
     
    void *Time::getTime()
    {
      return (&_time);
    }
     
    void Time::setTime(sf::Time &time)
    {
      _time = time;
    }
     
    float Time::asSeconds() const
    {
      return (_time.asSeconds());
    }
     
    int Time::asMilliseconds() const
    {
      return (_time.asMilliseconds());
    }
     
    int Time::asMicroseconds() const
    {
      return (_time.asMicroseconds());
    }
     
    Time	&Time::operator=(Time &right)
    {
      _time = right._time;
      return (*this);
    }
     
    bool operator==(Time &left, Time &right)
    {
      return (*((sf::Time*)left.getTime()) == *((sf::Time*)right.getTime()));
    }
     
    bool operator!=(Time &left, Time &right)
    {
      return (*((sf::Time*)left.getTime()) != *((sf::Time*)right.getTime()));
    }
     
    bool operator<(Time &left, Time &right)
    {
      return (*((sf::Time*)left.getTime()) < *((sf::Time*)right.getTime()));
    }
     
    bool operator>(Time &left, Time &right)
    {
      return (*((sf::Time*)left.getTime()) > *((sf::Time*)right.getTime()));
    }
     
    bool operator<=(Time &left, Time &right)
    {
      return (*((sf::Time*)left.getTime()) <= *((sf::Time*)right.getTime()));
    }
     
    bool operator>=(Time &left, Time &right)
    {
      return (*((sf::Time*)left.getTime()) >= *((sf::Time*)right.getTime()));
    }
     
    Time operator+(Time &left, Time &right)
    {
      Time	result;
     
      result = left;
      result += right;
      return (result);
    }
     
    Time &Time::operator+=(Time &left)
    {
      _time += *((sf::Time*)left.getTime());
      return (*this);
    }
     
    Time operator-(Time &left, Time &right)
    {
      Time	result;
     
      result = left;
      result -= right;
      return (result);
    }
     
    Time &Time::operator-=(Time &left)
    {
      _time -= *((sf::Time*)left.getTime());
      return (*this);
    }
    }
     
    namespace TIME
    {
      EGDL::SFML::Time milliseconds(double time)
      {
        Time sftime;
        sf::Time tmptime;
        tmptime = sf::milliseconds(time);
        sftime.setTime(tmptime);
        return (sftime);
      }
     
      EGDL::SFML::Time microseconds(double time)
      {
        Time sftime;
        sf::Time tmptime;
        tmptime = sf::microseconds(time);
        sftime.setTime(tmptime);
        return (sftime);
      }
     
      EGDL::SFML::Time seconds(double time)
      {
        Time sftime;
        sf::Time tmptime;
        tmptime = sf::seconds(time);
        sftime.setTime(tmptime);
        return (sftime);
      }
     
      void sleep(EGDL::SFML::Time time)
      {
        sf::Time sftime;
        sftime = *((sf::Time*)(time.getTime()));
        sleep(sftime);
      }
    }
    }
    Je ne trouve vraiment pas d'ou viens l'erreur sachant que la librairie compile parfaitement sans erreur n'y warning.

    Je vous remercie d'avance pour vos reponses.

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 274
    Points : 176
    Points
    176
    Par défaut
    Les erreurs "undefined reference to" sont des erreurs de link (d'ailleurs j'en ai une aussi en ce moment). Quelles sont les options que tu utilises pour le linkage ?

  3. #3
    Membre confirmé

    Homme Profil pro
    Etudiant
    Inscrit en
    Juillet 2012
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 108
    Points : 573
    Points
    573
    Par défaut
    Bonjour,

    je tente une derniere approche, en ayant la ferme assurance que tu verras les derniers messages, afin qu'on t'aide.

    Quelles sont tes options de linkage : QtCreator (.pro) CodeBlocks(Projet/Build options) pour qu'on puisse t'aider.

    Cordialement

    Bonne soirée
    Le paradigme de chacun ne dépend pas de lui, mais de son éducation...

    Le mot donne à la pensée son existence la plus haute et la plus noble.
    Spinoza

    Quiconque n'est pas choqué par la théorie quantique ne la comprend pas.
    Niels Bohr

    http://isocpp.org/

Discussions similaires

  1. undefined reference et sfml-audio 2.0
    Par Lintel-oo dans le forum SFML
    Réponses: 4
    Dernier message: 09/05/2013, 18h34
  2. winsock.h : undefined reference...
    Par abraxas dans le forum Dev-C++
    Réponses: 14
    Dernier message: 06/08/2012, 13h42
  3. Compilation de xmms : undefined reference to...
    Par Michaël dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 04/02/2005, 19h05
  4. undefined reference to `xmlParseFile'
    Par Clemaster dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 25/06/2004, 20h38
  5. g++ : undefined reference to ...
    Par le_barbu dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 14/05/2004, 07h23

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