Ich schlage mich zurzeit mit einem Fehler herum und ich weiß nicht mehr weiter.
Vielleicht könnt ihr mir ja einen Tipp oder eine Idee geben.
Folgendes:
Ich arbeite zurzeit an einem kleinem Spiel, bzw. Techdemo.
Ich arbeite mit cmake, MinGW und Visual Studio 9 unter Windows XP Professional Service Pack 3.
(Auf meinem Laptop mit Windows Vista tritt dasselbe Problem auf)
Mein Spiel bindet meine eigene Engine ein, die sich in einer DLL befindet.
Klappt soweit alles ganz gut.
Nun habe ich in meine Engine.dll eine neue Klasse hinzugefügt und verwende sie im Spiel.
Und ich bekomme immer diese Fehlermeldung hier:
|
Quellcode
|
1
2
3
4
|
CMakeFiles\SpaceCraft.dir/objects.a(main.cpp.obj):main.cpp:(.text+0xbdc): undefined reference to `_imp___ZN20DRGeometrieIcoSphereC1Ev'
CMakeFiles\SpaceCraft.dir/objects.a(main.cpp.obj):main.cpp:(.text+0xbfb): undefined reference to `_imp___ZN20DRGeometrieIcoSphere13initIcoSphereEj'
CMakeFiles\SpaceCraft.dir/objects.a(main.cpp.obj):main.cpp:(.text+0xd70): undefined reference to `_imp___ZN20DRGeometrieIcoSphereD1Ev'
CMakeFiles\SpaceCraft.dir/objects.a(main.cpp.obj):main.cpp:(.text+0xdaf): undefined reference to `_imp___ZN20DRGeometrieIcoSphereD1Ev'
|
Die Klasse DRGeometrieIcoSphere die ich neu erstellt habe ist abgeleitet von der Klasse
DRGeometrieSphere.
Der Zugriff auf Funktionen der Klasse DRGeometrieSphere funktioniert.
Hier ist ein Ausschnitt aus den jeweiligen Klassen-Deklarationen.
Die Quellcodedatein (*.cpp) binden jeweils alle denselben Header ein (DREngine2Main.h) welcher alle Header einbindet.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
...
#include "DRTextur.h"
#include "DRGeometrie.h"
#include "DRGeometrieSphere.h"
#include "DRGeometrieIcoSphere.h"
#include "DRText.h"
....
|
DRGeometrieIcoSphere:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
#ifndef __DR_ENGINE_GEOMETRIE_ICO_SPHERE_H
#define__DR_ENGINE_GEOMETRIE_ICO_SPHERE_H
class ENGINE_API DRGeometrieIcoSphere : public DRGeometrieSphere
{
public:
DRGeometrieIcoSphere();
...
};
#endif
|
DRGeometrieSphere:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#ifndef __DR_ENGINE_GEOMETRIE_SPHERE_H
#define__DR_ENGINE_GEOMETRIE_SPHERE_H
class DRGeometrie;
class ENGINE_API DRGeometrieSphere : public DRGeometrie
{
public:
DRGeometrieSphere();
...
};
#endif
|
DRGeometrie:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
|
#ifndef _DR_ENGINE_GEOMETRIE_h
#define_DR_ENGINE_GEOMETRIE_h
class ENGINE_API DRGeometrie
{
public:
DRGeometrie();
...
};
#endif
|
ENGINE_API:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#ifdef _WIN32
#ifndef BUILD_ENGINE_DLL
#define ENGINE_API __declspec(dllimport)
#else
#define ENGINE_API __declspec(dllexport)
#endif
#else //_WIN32
#ifdef BUILD_ENGINE_DLL
#define ENGINE_API
#else
#define ENGINE_API
#endif
#endif //_WIN32
|
Nochmal zusammengefasst gesagt.
Sobald ich eine Funktion der DRGeometrieIcoSphere Klasse aufrufe, bekomme ich Linker-Fehler (nur MinGW).
Beim Aufruf von Funktioinen der DRGeometrieSphere Klasse oder der DRGeometrie Klasse gibt es keine Fehler.
Wenn ich es mit Visual Studio 9 probiere, funktioniert es ebenfalls alles einwandfrei.
Hat einer von euch eine Idee, einen Hinweis was das Problem sein könnte?
Vielen Dank schonmal im voraus dafür..
Alles Liebe
Dario / Einhorn im Mond