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.