Bonjour,
Je travaille avec mingw sous Windows XP.
J'ai créé une dll base.dll qui contient la déclaration (base.h) et la définition (base.cpp) d'une classe virtuelle MyBase.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #ifndef _MYBASE_
#define _MYBASE_
namespace NSBase
{
class MyBase
{
public:
MyBase();
MyBase(const MyBase & base);
MyBase(const int & value);
virtual void Echo() = 0;
protected:
int value;
};
};
#endif |
Ensuite je voudrais créér une seconde dll derived.dll qui contient la déclaration (derived.h) et la définition (derived.cpp) d'une classe MyDerived qui hérite de MyBase. J'ai donc juste fait un include de base.h dans derived.h.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #ifndef _MYDERIVED_
#define _MYDERIVED_
#include "base.h"
namespace NSDerived
{
class MyDerived : public NSBase::MyBase
{
public:
MyDerived();
MyDerived(const MyDerived & derived);
MyDerived(const int & value);
void Echo();
};
};
#endif |
Et ça marche. Dans les 2 cas je passe par un .o temporaire avant de faire le .dll. Et pour derived.dll, je lie directement avec base.dll.
g++ -shared -o derived.dll derived.o base.dll
J'ai mis un zip avec tout le code en pièce jointe.
En fait ça c'est que j'essaie de faire sur un programme plus conséquent. Et là ça marche pas et je comprends pas. Si je fait le rapprochement avec le programme test, le link me sort une erreur qui correspondrait à
1 2 3
| derived.o: dans la fonction MyDerived() :
derived.cpp:6:référence indéfinie vers NSBase::MyBase()
derived.cpp:14:référence indéfinie vers NSBase::MyBase(NSBase::MyBase const &) |
Pareil pour le destructeur et le constructeur par copie. Pourtant, j'ai vérifié tout. Je fais bien l'édition des liens avec la bonne dll au bon endroit tout ça. Cela donne l'impression que base.dll (pour rester dans le parallèle) ne contient pas la définition de MyBase.
Je sais bien que si je vous donne pas le code qui pose problème vous pouvez pas m'aider. Cependant est-ce que vous avez déjà eu ce cas. J'ai vu sur des forums qu'il fallait respecter l'ordre des dépendances (ce que je fait). Il y a peut-être autre chose de ce type qui fait que ça compile pas.
Merci.
Flo.
Partager