Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DarioFrodo

Treue Seele

  • »DarioFrodo« ist der Autor dieses Themas

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

1

07.09.2011, 22:18

Neue Klasse in DLL erzeugt "undefined reference" Fehler (nur MinGW, MVC läuft)

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
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)

DarioFrodo

Treue Seele

  • »DarioFrodo« ist der Autor dieses Themas

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

2

07.09.2011, 22:31

Okay.. Fehler gefunden, ich habe nicht bedacht das MinGW direkt die DLL linkt, und keine lib-Datei benötigt.
Ich hatte die DLL nicht mehr aktualisiert... ._.
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)