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 :
On peut voir que tout se situe dans Time. Je vous passe le code :
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()'
Interface ITime :
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 #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 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 #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
Je ne trouve vraiment pas d'ou viens l'erreur sachant que la librairie compile parfaitement sans erreur n'y warning.
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 vous remercie d'avance pour vos reponses.
Partager