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

blub

Frischling

  • »blub« ist der Autor dieses Themas
  • Private Nachricht senden

1

05.08.2008, 23:38

Linker-Fehler beim Kompilieren der Engine

Hallo,
ich habe die 3.Auflage des Buches und wollte heute alles Notwendige für die Programmierung einrichten. Ich benutze Windows Vista 64-Bit und Visual Studio 2008. Dazu habe ich mir das aktuelle (Juni) DirectX-SDK installiert, und den Tribase-Ordner auf Platte kopiert. Das Plattform-SDK habe ich nicht installiert, denn es ist ja soweit ich das verstanden habe durch das Windows-SDK abgelöst worden. Nach dem Öffnen der "TriBase 2005.sln" musste ich das Projekt dann nach 2008 konvertieren lassen. Zu den VC++ -Verzeichnissen (include/Bibl.) habe ich

G:\Programmierung\directxCD\TriBase\Include
C:\Program Files\Microsoft SDKs\Microsoft DirectX SDK (June 2008\Include
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include

G:\Programmierung\directxCD\TriBase\Lib
C:\Program Files\Microsoft SDKs\Microsoft DirectX SDK (June 2008\Lib\x64
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64

hinzugefügt.
Nun wollte ich zum Testen einfach mal das Projekt "Tribase" kompilieren (Release-Konfiguration). Kompilieren klappt auch, nur beim Linken gibts eine Reihe von Fehlermeldungen:

Quellcode

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
1>Verknüpfen...
1>   Bibliothek ".\Release/TriBase.lib" und Objekt ".\Release/TriBase.exp" werden erstellt.
1>tbConfig.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DirectSoundEnumerateA@8".
1>tbDirect3D.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DXGetErrorDescription9A@4".
1>tbDirect3D.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DXGetErrorString9A@4".
1>tbDirectInput.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_c_dfDIJoystick".
1>tbDirectInput.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_GUID_SysMouse".
1>tbDirectInput.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_c_dfDIKeyboard".
1>tbDirectInput.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_GUID_SysKeyboard".
1>tbDirectInput.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DirectInput8Create@20".
1>tbDirectInput.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_c_dfDIMouse2".
1>tbDirectInput.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_IID_IDirectInput8A".
1>tbDirectSound.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_IID_IDirectSound3DListener".
1>tbDirectSound.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DirectSoundCreate8@12".
1>tbDraw2D.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_D3DXCreateTextureFromFileInMemoryEx@60".
1>tbEffect.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_D3DXCreateEffect@36".
1>tbSound.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_IID_IDirectSoundBuffer8".
1>tbSound.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_IID_IDirectSound3DBuffer".
1>tbTextureManager.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_D3DXCreateVolumeTextureFromFileInMemoryEx@64".
1>tbTextureManager.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_D3DXCreateCubeTextureFromFileInMemoryEx@56".
1>TriBase.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_D3DXCreateEffectPool@4".
1>.\Release/TriBase.dll : fatal error LNK1120: 19 nicht aufgelöste externe Verweise.
1>Das Buildprotokoll wurde unter "file://g:\Programmierung\directxCD\TriBase\Release\BuildLog.htm" gespeichert.
1>TriBase - 20 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 1 aktuell, 0 übersprungen ==========


Ich habe hier schon einige Threads zum Thema "Nicht aufgelöstes externes Symbol" gelesen, jedoch konnte ich nirgends Abhilfe finden.
In den Projekteigenschaften von Tribase habe ich folgendes unter Linker->zusätzlich Abhängigkeiten stehen (union aller hier im Forum aufgetauchten lib-Dateien):

Quellcode

1
d3d9.lib d3dx9.lib dinput8.lib dsound.lib strmiids.lib strmbase.lib dxerr9.lib dxguid.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comctl32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib TriBase.lib DXErr.lib odbc32.lib odbccp32.lib


Probiert habe ich es auch mal ohne odbc32.lib odbccp32.lib
und auch mal nur mit folgender Zeile:

Quellcode

1
dxerr.lib d3dx9d.lib d3d9.lib dxguid.lib dinput8.lib


Ich denke nicht, dass die Linker-Fehler etwas mit der Visual-Studio-Version oder dem Konvertieren nach 2008er Projekt zu tun haben. Vielleicht habe ich beim Stöbern im Faq-Forum und anderen Threads etwas übersehen, aber bevor ich jetzt noch Stunden mit dem Durchprobieren verschiedener Platform- oder DirectX-SDKs zubringe, frage ich hier ob jemand sieht was ich falsch mache. Habe wie gesagt noch nix selbst geschrieben sondern wollte erstmal testen ob die Tribase-Engine überhaupt zu kompilieren geht.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

06.08.2008, 01:37

Re: Linker-Fehler beim Kompilieren der Engine

Zitat von »"blub"«


G:\Programmierung\directxCD\TriBase\Lib
C:\Program Files\Microsoft SDKs\Microsoft DirectX SDK (June 2008\Lib\x64
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64

Ich würde dir zuerst raten, das nochmal genauer anzuschaun. Ich schätze du musst eher für Win32 die x86 libs und nur für x64 die x64 Libs einstellen. So ist es zumindest in VS 2005.

3

06.08.2008, 08:39

Ja ich würde immer nur entweder x86 oder x64 linken.

4

06.08.2008, 14:32

Zitat von »"blub"«

[...]Ich benutze Windows Vista 64-Bit[...]

Ich denke, dass die x64 schon die richtigen sind.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

5

06.08.2008, 15:17

Nur ist die TriBase imho nicht mit 64 Bit vorkompiliert.

Edit: ach fuck, die will er ja auch kompilieren ^^ Aber warum findet sich dann die Tribase.lib in deinen Abhängigkeiten?

6

06.08.2008, 17:19

Oh sorry ich hab mich verlesen, er hat ja nur x64 verlinkt, ich hab beides gelesen. :oops:

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

7

06.08.2008, 18:09

Zitat von »"Steef"«

Zitat von »"blub"«

[...]Ich benutze Windows Vista 64-Bit[...]

Ich denke, dass die x64 schon die richtigen sind.

Nicht für die TriBase, zumindest nicht solange irgendwelche Abhängigkeiten noch auf 32 Bit kompliert sind.

blub

Frischling

  • »blub« ist der Autor dieses Themas
  • Private Nachricht senden

8

06.08.2008, 18:18

Danke, daran lag es wohl (habe jetzt die x86 Verzeichnisse genommen). Das Projekt ging nun ohne Fehler zu "erstellen". Einzige Warnung die auftrat:

Quellcode

1
2
3
1>.\wxdebug.cpp(11) : warning C4603: "_WINDLL": Das Makro ist nicht definiert, oder die Definition wurde nach Verwendung des vorkompilierten Headers geändert.
1>        Makro zu vorkompiliertem Header hinzufügen statt hier zu definieren
1>        ".\wxdebug.cpp(13)": Verwendung eines vorkompilierten Headers


Danach habe ich es auch einmal mit "Neu Erstellen" versucht und prompt kam ein Fehler im resource.rc File des Projekts, dass "mfc/afxres.h" nicht gefunden wurde. In anderen Threads wurde das durch Umschreiben des Resource-Files erledigt (stattdessen windows.h und IDC_STATIC anders definiert). Allerdings wollte ich nix an dem Tribase-Engine Projekt abändern. Musste ich auch nicht, denn ich habe in der VisualStudio Installation ja einen Pfad "e:\Microsoft Visual Studio 9.0\VC\atlmfc\include" in welchem eine afxres.h enthalten ist. Habe einen Ordner "e:\Microsoft Visual Studio 9.0\VC\mfc" erstellt, alle Files aus obigem Pfad reinkopiert und dann den Pfad "e:\Microsoft Visual Studio 9.0\VC\" in die VisualStudio VC++ -Verzeichnisse eingebunden.
Nun klappt auch das "Neu Erstellen" ohne selbst an dem Original-Code rumdoktoren zu müssen. Diese Lösung sollte ausreichen, oder?

Ist die Warnung mit der _WINDLL ernst zunehmen?

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

9

06.08.2008, 18:27

Ob es nun genau so geht wie du es gemacht hast wirst du erst wissen, wenn du die TB nutzt ohne dass komische Probleme auftreten... aber zumindest klingt es so als ob alles ok ist.

Werbeanzeige