nmake confclean
configure -no-webkit
Entwicklungsumgebung Einrichten
Diese Anleitung soll dabei helfen, eine Entwicklungsumgebung für das LoL4-Fangame einzurichten.
Sie bezieht sich auf Windows und Visual C++ Express 9 (2008), andere IDEs sollten
auch möglich sein (ein Anpassen der Projektdateien wäre aber notwendig). Andere Plattformen wurden bis jetzt noch nicht getestet.
- Vorbereitungen
- Microsoft Platform SDK
- Boost
- Ogre
- OpenAL
- Qt
- Dependencies
- Das Game Selbst
- Fehlerquellen
- Sonstige Hinweise
-
Vorbereitungen
-
Den Trunk aus dem SVN auschecken. Es sollte sich die folgende Ordnerstruktur bilden:
|-trunk |-debug |-dependencies |-include |-lol4 |-lol4edit |-media |-release |-screenshots |-src
- Das Dependencies-Paket herunterladen und in den dependencies-Ordner aus dem SVN extrahieren.
-
Den Trunk aus dem SVN auschecken. Es sollte sich die folgende Ordnerstruktur bilden:
-
Microsoft Platform SDK
Wird für die 'Express'-Versionen von Visual C++ benötigt.- Microsoft Platform SDK for Windows Server 2003 R2 herunterladen und installieren. Den Installationspfad unter der Umgebungsvariable %MSPSDK% speichern (oder in dieser Anleitung "%MSPSDK%" immer durch den richtigen Pfad ersetzen)
-
Im VC++ Pfade eintragen:
Include Files:
- $(MSPSDK)\Include
- $(MSPSDK)\Include\mfc
- $(MSPSDK)\Lib
-
Boost
-
Boost wird mit der SDK-Version von Ogre mitgeliefert, hier reicht es, die Umgebungsvariable BOOST_ROOT auf deren Pfad zu setzen.
Im Falle des Sourcecode-Releases ist das nicht der Fall, aber wenn es eh schon benötigt wird, sollte man Ogre auch damit kompilieren. Siehe dazu den Abschnitt zu Boost im Ogre Prerequisites-Artikel.
-
Es müssen folgende Umgebungsvariablen gesetzt werden:
- BOOST_ROOT (zB C:\Programme\boost\boost_1_44)
- BOOST_INCLUDEDIR (zB C:\Programme\boost\boost_1_44, genau wie BOOST_ROOT)
- BOOST_LIBRARYDIR (zB C:\Programme\boost\boost_1_44\lib)
-
Außerdem müssen VC++-Pfade gesetzt werden:
Include Files:- $(BOOST_ROOT)
- $(BOOST_ROOT)\lib
-
Boost wird mit der SDK-Version von Ogre mitgeliefert, hier reicht es, die Umgebungsvariable BOOST_ROOT auf deren Pfad zu setzen.
-
Ogre
-
Ogre SDK:
- OgreSDK von http://www.ogre3d.org/ installieren
Installationsanleitung: http://www.ogre3d.org/wiki/index.php/Installing_An_SDK - Der Installer sollte automatisch die Umgebungsvariable OGRE_HOME anlegen. Außerdem sollte die Variable BOOST_ROOT angelegt werden, die den Pfad der "mitgelieferten" Boost-Installation zeigt (Man kann auch eine andere Boost-Installation verwenden) Der Ordner befindet sich im OGRE_HOME und heißt möglicherweise boost_1_42.
- VC++-Pfade Anpassen:
Include Files:- $(OGRE_HOME)\include\OGRE
- $(OGRE_HOME)\include\OGRE\Terrain
- $(OGRE_HOME)\lib\release
- $(OGRE_HOME)\lib\debug
- OgreSDK von http://www.ogre3d.org/ installieren
-
Ogre Source:
- Von der Download-Seite das 'Source For Windows'-Paket runterzuladen, außerdem auch das 'Microsoft Visual C++ Dependencies Package'
-
Anleitung: http://www.ogre3d.org/tikiwiki/Building+Ogre&structure=Development
bzw direkt der Quick Start Guide
Wichtig sind auch die Prerequisites. - Die Variable OGRE_SRC anlegen und auf den Pfad des Source-Ordners setzen (der, wo OgreMain drin ist)
-
Die Variable OGRE_HOME anlegen und auf den Pfad des Build-Ordners setzen (der, den man in CMake unter "Where to build the binaries" angegeben hat.
Da drin sollten die Ordner bin und lib sein)
Ich nehme immer %OGRE_SRC%\build. - Die dependencies irgendwohin entpacken, und die Umgebungsvariable OGRE_DEPENDENCIES_DIR auf den entsprechenden Pfad setzen. Die Dependencies kompilieren.
- Nun mit CMake die Solution für Ogre erzeugen lassen und dort ALL_BUILD im Debug und Release kompilieren.
- VC++-Pfade Anpassen:
Include Files:- $(OGRE_HOME)\include
- $(OGRE_SRC)\OgreMain\include
- $(OGRE_SRC)\Components\Terrain\include
- $(OGRE_HOME)\lib\release
- $(OGRE_HOME)\lib\debug
-
Ogre SDK:
OpenAL
- OpenAL SDK herunterladen: http://connect.creativelabs.com/developer/Wiki/OpenAL%20SDK%20for%20Windows.aspx und installieren.
Wenn der Installer nicht die Umgebungsvariable OPENAL_SDK nicht anlegt, muss dies manuell gemacht werden. Sie muss den Installationspfad enthalten, zB C:\Programme\OpenAL 1.1 SDK - Das Installationsverzeichnis in die VC++-Pfade eintragen:
Include Files:$(OPENAL_SDK)\includeLibrary Files:$(OPENAL_SDK)\libs\Win32
- OpenAL SDK herunterladen: http://connect.creativelabs.com/developer/Wiki/OpenAL%20SDK%20for%20Windows.aspx und installieren.
QT
- von http://qt.nokia.com/downloads die LGPL/Free -> Complete Development Environment Version herunterladen und installieren
-
Im Installationsverzeichnis diese beiden Dateien löschen, falls sie vorhanden sind:
qt\src\script\tmp\moc\debug_shared\mocinclude.tmp qt\src\script\tmp\moc\release_shared\mocinclude.tmp
-
Mit dem VC++ Command Promt in das QT-Verzeichnis wechseln (zB c:\Qt\2009.04\qt), und dort eingeben:
configure -debug-and-release -opensource -shared -platform win32-msvc2008 -no-webkitLizenz akzeptieren.
-
Ob es in der Anleitung nun drinsteht oder nicht, die Umgebungsvariable QTDIR
muss angelegt werden, die den Installationspfad von Qt enthält, zB C:\Qt\2009.04\qt.
(unter Umständen muss das "\qt" am Ende weggelassen werden, je nachdem wohin es die fertig kompilierten binaries dann steckt. Siehe unter "Sonstige Fehler" für Details). -
VC++-Pfade anpassen:
- Include Files:
- $(QTDIR)\include\QtGui
- $(QTDIR)\include
- Include Files:
-
Mögliche Fehler:
-
QNetworkReplyHandler.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall WebCore::QNetworkReplyHandler::metaObject(void)const " (?metaObject@QNetworkReplyHandler@WebCore@@UBEPBUQMetaObject@@XZ)
oder dergleichen: das in Qt enthaltene Webkit macht Probleme. Wir brauchen es nicht, also kann man es rausschmeißen (cleanen und dann ohne webkit configuren)
-
api\qscriptextensionplugin.h(43): Error: Undefined interface
Es sind überflüssige temporäre Dateien im Qt-release enthalten. Es müssen zwei Dateien mit dem Namen mocinclude.tmp in den Ordnern X:\Qt\20xx.xx\qt\src\script\tmp\moc\debug_shared und .\release_shared gelöscht werden.
Danach noch einmal nmake.
-
QNetworkReplyHandler.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall WebCore::QNetworkReplyHandler::metaObject(void)const " (?metaObject@QNetworkReplyHandler@WebCore@@UBEPBUQMetaObject@@XZ)
-
Dependencies
- dependencies/vc_2008/Dependencies.sln öffnen und ALL_BUILD durchkompilieren.
- Mögliche Fehler
- fatal error C1083: Datei (Quelle) kann nicht geöffnet werden: "pfad\zu\einem\Ordner": Permission denied
Taucht besonders gerne in OgreNewt auf und wird offenbar durch einen Bug in VC++ verursacht. Man muss die .vcproj-Datei des jeweiligen Projekts öffnen (es sind XMLs) und dort in den Werten von 'AdditionalIncludeDirectories' (kommt 2x vor, für Debug und Release) alle Vorkommen von '"' löschen.
Wenn man das nicht macht, geht VC++ offenbar davon aus, dass der letzte Eintrag in der Liste eine Datei zum Kompilieren ist.
Ich habe zwar versucht, die Dateien nach Möglichkeit zu bereinigen, aber wenn man irgendwas über die GUI an den Pfaden ändert, muss hier wieder nachgebessert werden...
- fatal error C1083: Datei (Quelle) kann nicht geöffnet werden: "pfad\zu\einem\Ordner": Permission denied
-
Das Game selbst
- In der lol4.sln ist ein Projekt mit dem Namen copy_dlls. Dieses sollte zuerst in Debug und Release "kompiliert" werden. Wenn alle Pfade richtig gesetzt sind, kopiert es alle notwendigen DLLs in die Ordner Debug und Release des Games.
- Jetzt solltet ihr die lol4.sln öffnen und das Fangame kompilieren können.
- Mögliche Fehler
- Beim Debuggen: Fehler über nicht gefundene config.xml, diverse DLLs usw
Vermutlich hat VC++ sich entschieden, dass es mal wieder an der Zeit ist, die Debug-Pfad-Einstellungen zu verwerfen.
In den Projekteigenschaften müssen "Command" auf "$(TargetPath)" und "Working Directory" auf "$(TargetDir)" stehen.
Da das immer wieder mal ausgebessert werden muss, habe ich das Batchscript "restore_debugger_path.bat" angelegt, welches das automatisch erledigt.
- Beim Debuggen: Fehler über nicht gefundene config.xml, diverse DLLs usw
-
Sonstige Fehlerquellen
- "windows.h nicht gefunden":
Der Pfad der Windows Platform SDK wurde nicht in die VC++-Include-Pfade eingetragen.
- "Ogre.h nicht gefunden":$(OGRE_HOME)\inc wurde nicht in die "Include Files"-pfade eingetragen
- "Newton.h nicht gefunden":
$(NEWTON_HOME)\sdk wurde nicht in die "Include Files"-pfade eingetragen oder die Umgebungsvariable NEWTON_HOME stimmt nicht
- "winres.h nicht gefunden":
warscheinlich fehlt das Microsoft Platform SDK. Zwar steht im Ogre-Wiki das nur als Hinweis für VC++ 8, aber man braucht es wohl auch für VC++ 9.
- Microsoft Platform SDK for Windows Server 2003 R2 Herunterladen und installieren. Den Installationspfad merken.
- In VC++ muss nun unter Include Files der Installationspfad des PSDK + "Include\mfc" eingetragen werden, also zB
C:\Programme\Microsoft Platform SDK for Windows Server 2003 R2\Include\mfcC:\Programme\Microsoft Platform SDK for Windows Server 2003 R2\Include
- Der Befehl "C:\Qt\2009.04\bin\moc" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
oder
QtGui4.lib konnte nicht gefunden werden
oder
ganz viele qt-relevante .h-Dateien nicht gefunden
oder dergleichen.Ich bin mir nicht ganz sicher, wieso genau, aber anscheinend können nach dem Kompilieren von Qt die ganzen Dateien entweder unter X:\Qt\20xx.xx oder aber unter X:\Qt\20xx.xx\qt landen. Sollte das zweite der Fall sein, muss die Umgebungsvariable QTDIR auf X:\Qt\20xx.xx\qt gesetzt werden und nicht auf X:\Qt\20xx.xx. -
Could not load dynamic library .\RenderSystem_Direct3D9_d. System Error: Das angegebene Modul wurde nicht gefunden.
oder
d3d9x_XX.dll wurde nicht gefunden
oder ähnlicher DirectX-bezogener Fehler.Es gibt mehrere Ausgaben derselben DirectX-Version (die an einem best. Monat erschienen ist), für das DirectX9-Rendersystem von Ogre gibt es eine Version, die es mindestens braucht. Die momentane Mindestversion für Ogre 1.7.1 ist die von August 2009 - Der Prozedureinsprungpunkt "?allocateBytes@NedAllocPolicy@Ogre@@SAPAXIPBDH0@Z" wurde in der DLL "OgreMain(_d).dll" nicht gefunden.
Falls ein vorkompiliertes CEGUI-SDK verwendet wurde, ist dies das Zeichen, dass es zur aktuellen Ogre-Version inkompatibel ist. CEGUI muss manuell kompiliert werden.
- Microsoft C++ exception: CEGUI::GenericException at memory location 0x001293fc..
Vermutlich fehlt eine für CEGUI wichtige DLL. Es sollte im CEGUI.log nachgesehen werden, was genau. Wenn man einen anderen Imagecodec verwendet, müssen auch die entsprechenden DLLs in die Release- und Debugordner kopiert werden. Eine Möglichkeit ist:DynamicModule::DynamicModule - Failed to load module 'CEGUISILLYImageCodec_d': Unknown Error
-
msvcprtd.lib(MSVCP90D.dll) : error LNK2005: (...) already defined in tinyxmld_STL.lib(tinyxml.obj)
(sehr viele Fehler dieser Art)Dies ist ein Problem mit TinyXML, um das zu beheben, muss am Projekt "tinyxmlSTD" eine Korrektur vorgenommen werden. In den Eigenschaften unter "C/C++" -> "Code Generation" die Einstellung "Runtime Library" von "Multi-Threaded (/MT)" bzw "Multi-Threaded Debug (/MTd)" in "Multi-Threaded DLL (/MD)" bzw "Multi-Threaded Debug DLL (/MDd)" ändern.
- "windows.h nicht gefunden":