Seite 1 von 1

LNK2019 Nicht aufgelöstes Symbol - weshalb?[gelöst]

Verfasst: 08.07.2011, 20:48
von Durza
Moin Community

Mir sind soeben einige kleine aber nervige Linker Errors untergekommen, doch ich weiss einfach nicht,
woran es liegen mag! :oops: Ich habe mir auch schon die Finger wund gegoogelt aber trotzdem nichts gefunden... :cry:
Ach ja, mein Compiler ist Visual C++ 2010 Express

Mein Programm sollte eig. nur ein Standbild meines Levels ausgeben. Ich benutze die Engine Genesis3D http://www.genesis3d.com
Es ist in 2 Dateien aufgeteilt:
  • Game.hpp (allg. Deklarationen)
    winmain.cpp (hauptfunktion (war ja klar))
    +Engine

Hier ein paar Codeschnipsel:

Code: Alles auswählen

Datei: Game.hpp

void TGame::CreateGame ()
{
	geRect   WorldScreen;   //Anzeigefläche
	char     WorldName[64]; //Name der Welt/Level
	geVFile  *WorldFile;    //BSP-Datei (Welt/Level)
	//3D Engine initialisieren
	Engine = geEngine_Create (GHandle, GVersion, ".");
	if (!Engine) ExitError("3D-Engine konnste nicht gestartet werden!");
	//Anzeigedaten für Engine abschalten
	geEngine_EnableFrameRateCounter(Engine, GE_FALSE) ;
	//Treiber auswählen
	SetDriver();
	//Anzeigefläche festlegen
	WorldScreen.Left= 0;
	WorldScreen.Right = MaxWidth -1;
	WorldScreen.Top = 0;
	WorldScreen.Bottom = MaxHeight -1;
	//Koordinaten-Matrix setzen
	geXForm3d_SetIdentity (&XForm);
	//Kamera initialisieren
	Camera = geCamera_Create (2.0, &WorldScreen);
	if (!Camera) ExitError ("Kamera konnte nicht installiert  werden! :'(");
	//Bsp Datei laden
	strcpy (WorldName, Pfad);
	strcat (WorldName, BSP_Datei);
	WorldFile = geVFile_OpenNewSystem(NULL, GE_VFILE_TYPE_DOS, WorldName, NULL, GE_VFILE_OPEN_READONLY);
	//Wenn Datei ok, Welt/Level erzeugen
	if (WorldFile)
	{
		World = geWorld_Create(WorldFile);
		geVFile_Close(WorldFile);

	};
	if (!World) ExitError("Welt/Level lässt sich nicht erzeugen!");
	//Welt/Level mit 3D Engine verknüpfen
	if (!geEngine_AddWorld(Engine, World)) ExitError ("Welt/Level lässt sich nicht einbinden!");
}
Nach diesem Teil ergeben sich die Fehler:
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_geEngine_AddWorld" in Funktion ""public: void __thiscall TGame::CreateGame(void)" (?CreateGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "@geVFile_Close@4" in Funktion ""public: void __thiscall TGame::CreateGame(void)" (?CreateGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_geWorld_Create" in Funktion ""public: void __thiscall TGame::CreateGame(void)" (?CreateGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "@geVFile_OpenNewSystem@20" in Funktion ""public: void __thiscall TGame::CreateGame(void)" (?CreateGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "@geCamera_Create@8" in Funktion ""public: void __thiscall TGame::CreateGame(void)" (?CreateGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "@geXForm3d_SetIdentity@4" in Funktion ""public: void __thiscall TGame::CreateGame(void)" (?CreateGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_geEngine_EnableFrameRateCounter" in Funktion ""public: void __thiscall TGame::CreateGame(void)" (?CreateGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_geEngine_CreateWithVersion" in Funktion ""public: void __thiscall TGame::CreateGame(void)" (?CreateGame@TGame@@QAEXXZ)".

Code: Alles auswählen

Datei: Game.hpp
void TGame::RunGame ()
{
	//Koordinaten und winkel ausrichten
	geXForm3d_SetIdentity (&XForm);
	geXForm3d_RotateX (&XForm, 0.0);
	geXForm3d_RotateY (&XForm, 0.0);
	geXForm3d_RotateZ (&XForm, 0.0);
	geXForm3d_Translate(&XForm, 0.0, 0.0, 0.0);
	geCamera_SetWorldSpaceXForm (Camera, &XForm);
	//Rendering starten
	if(!geEngine_BeginFrame(Engine, Camera, GE_TRUE)) ExitError ("Beginn Frame gescheitert!");
	//Welt/Level rendern und darstellen
	if (!geEngine_RenderWorld (Engine, World, Camera, 0.0)) ExitError ("Rendering gescheitert");
	//Rendering beenden
	if (!geEngine_EndFrame (Engine)) ExitError ("End Frame gescheitert!");
}
Fehler:
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_geEngine_EndFrame" in Funktion ""public: void __thiscall TGame::RunGame(void)" (?RunGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_geEngine_RenderWorld" in Funktion ""public: void __thiscall TGame::RunGame(void)" (?RunGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_geEngine_BeginFrame" in Funktion ""public: void __thiscall TGame::RunGame(void)" (?RunGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "@geCamera_SetWorldSpaceXForm@8" in Funktion ""public: void __thiscall TGame::RunGame(void)" (?RunGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "@geXForm3d_Translate@16" in Funktion ""public: void __thiscall TGame::RunGame(void)" (?RunGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "@geXForm3d_RotateZ@8" in Funktion ""public: void __thiscall TGame::RunGame(void)" (?RunGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "@geXForm3d_RotateY@8" in Funktion ""public: void __thiscall TGame::RunGame(void)" (?RunGame@TGame@@QAEXXZ)".
1>winmain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "@geXForm3d_RotateX@8" in Funktion ""public: void __thiscall TGame::RunGame(void)" (?RunGame@TGame@@QAEXXZ)".

So geht das da immer weiter... :cry:
Sagt mir Bescheid, wenn ich mehr Codes schreiben soll.

Hoffe auf schnelle Antworten und danke schonmal im voraus!

Durza

Re: LNK2019 Nicht aufgelöstes Symbol - weshalb?

Verfasst: 08.07.2011, 21:14
von kristof
Die Linker-Fehler beziehen sich alle auf Funktionen die aus der Genesis3D Engine zu kommen scheinen. Das heisst, du hast vermutlich vergessen deinem Linker bekannt zu machen wo er die Bibliotheken von Genesis3D findet. Wie man das in Visual C++ macht weiss ich nicht, aber du wirst sicher ein Tutorial finden in dem das erklärt wird.

Re: LNK2019 Nicht aufgelöstes Symbol - weshalb?[wichtig]

Verfasst: 08.07.2011, 21:19
von Durza
Vielen Dank für die Antwort!

Ich dachte zwar, dass ich das korrekt gemacht habe, aber habe soeben gemerkt, dass ich dass doch verbockt habe :oops:
Aber wie heisst es doch so schön: Nobody's Perfect! :D

Durza

Re: LNK2019 Nicht aufgelöstes Symbol - weshalb?[wichtig]

Verfasst: 08.07.2011, 21:26
von Durza
hmm.. jetzt spinnt mein Compiler aber völlig! Plötzlich kann er nich einmal mehr die anderen .lib Dateien öffnen:

1>LINK : fatal error LNK1104: Datei "kernel32.lib" kann nicht geöffnet werden.
was mach ich nur falsch??

Re: LNK2019 Nicht aufgelöstes Symbol - weshalb?[wichtig]

Verfasst: 08.07.2011, 21:34
von Krishty
Klingt fast so, als hättest du versehentlich Ignore All Default Libraries in den Linker-Einstellungen aktiviert.

Re: LNK2019 Nicht aufgelöstes Symbol - weshalb?[wichtig]

Verfasst: 08.07.2011, 21:41
von Durza
Nein, eigentlich nicht. Ich habe blos am Ende von zusätzliche Abhängigkeiten Genesis.lib angehängt...

Re: LNK2019 Nicht aufgelöstes Symbol - weshalb?[wichtig]

Verfasst: 08.07.2011, 22:04
von Durza
naja.. Also ich habs mit einer Reinstallation vom Windows SDK probiert aber hat nichts genützt... :(

Re: LNK2019 Nicht aufgelöstes Symbol - weshalb?[wichtig]

Verfasst: 09.07.2011, 09:17
von Schrompf
Es liegt ja offensichtlich an Deiner letzten Änderung. Also mach die rückgängig oder studiere, was genau Du da geändert hast. Am Ende hast Du z.B. aus Versehen die Standard-Lib-Pfade versteckt, weil Du das "$(LibraryPath)" in den Projekteinstellungen gelöscht hast, was üblicherweise am Ende Deiner eigenen Pfade steht.

Re: LNK2019 Nicht aufgelöstes Symbol - weshalb?[wichtig]

Verfasst: 23.07.2011, 15:08
von Durza
Es tut mir leid, dass ich so lange nicht geanteortet habe, doch ich war in den Ferien und hatte dort (zu meinem
Bedauern) keinen Internetanschluss. Nun bin ich aber wieder zurück und los geht's.

Ich hab mir n' neues Projekt erstellt, die Dateien kopiert und die Bibliotheksdateien nochmal
sauber eingebunden und siehe da: Es funktioniert!

Ich hab wohl nur etwas beim Einbinden der Bibliotheksdateien verbockt :oops:

Aber: Danke für eure Hilfe!

Durza