Der Sourceforge-Benutzer
Nyrel hatte Probleme, als er Andorra 2D auf seinem Linux-System verwenden wollte. Er hat eine Anleitung geschrieben, um allen anderen Andorra 2D-Benutzern zu helfen, die versuchen, das selbe zu tun.
Andorra 2D 0.4.5.1 auf Linux i386 und amd64 zum Laufen bekommen
Ich habe diese Anleitung auf meinem ThinkPad-Notebook (i386, kubuntu 8.10, fpc 2.2.2, lazarus 0.9.26) und auf meinem PC (amd64, kubuntu 8.04 64bit, fpc 2.2.2, lazarus 0.9.27
SVN-Version etwa vom 1.1.2009) überprüft.
Voraussetzungen:
Eine funktionierende Installation von FPC und Lazarus.
Ich habe mich dazu entschieden, diese Anleitung Schritt für Schritt zu machen und alle dazwischenliegenden Fehlermeldungen zu zeigen, die man erhalten kann, bis alles richtig installiert ist. Dies kann vielleicht anderen helfen, diesen Thread zu finden, wenn sie nach ihren Fehlermeldungen suchen.
Es ist zu beachten, dass die gleichen Fehlermeldungen, die man erhält, aufgrund von Unterschieden in der Systemkonfiguration etwas anders sein können. Zögern Sie nicht, neue Fehlermeldungen und (hoffentlich) Lösungen zu diesem Thread hinzuzufügen.
Andorra 2D installieren
Laden Sie Andorra 2D herunter und entpacken Sie es in das Verzeichnis, in das sie es installieren wollen. Ich werde das folgende verwenden:
~/program/andorra
Erzeugen eines Testprojekts - Teil 1
Öffen Sie das SimpleNonVCL-Projekt in Lazarus. Dieses finden Sie hier:
~/program/andorra/demos/Simple/SimpleNonVCL/NoVCL.lpi
Drücken Sie F9 um zu versuchen, es zu kompilieren und auszuführen. Sie werden jedoch nicht weit kommen, weil es einige Dinge gibt, die sie ändern müssen:
Fehler 1:
Main.pas(50,31) Error: Identifier not found "ReportMemoryLeaksOnShutdown"
(Main.pas(50,31) Fehler: Bezeichner nicht gefunden: "ReportMemoryLeaksOnShutdown")
Lösung 1:
Einfach auskommentieren
Fehler 2:
/usr/bin/ld: cannot find -lfreeimage
/usr/bin/ld: -lfreeimage kann nicht gefunden werden
Lösung 2:
Die FreeImage-Bibliothek muss installiert werden. Starten Sie den Paketmanager für Ihre Linuxdistribution, (adept, synaptic, rpmdrake, etc.) suchen Sie nach FreeImage und installieren Sie es. Bei meinem System hieß das Paket "libfreeimage3".
Fehler 3 (noch einmal):
/usr/bin/ld: cannot find -lfreeimage
/usr/bin/ld: -lfreeimage kann nicht gefunden werden
Lösung 3:
Die FreeImage-Bibliothek kann nicht gefunden werden, weil die Bibliotheksdatei /usr/lib/libfreeimageplus.so.3 statt /usr/lib/libfreeimageplus.so heißt. Erzeugen sie eine symbolische Verknüpfung, um dies zu korrigieren:
sudo ln -s /usr/lib/libfreeimage.so.3 /usr/lib/libfreeimage.so
Mehr Informationen über das Problem mit FreeImage können in dem
FreeImage-Tutorial-Tutorial nachgelesen werden. Sie müssen FreeImage nicht mit Andorra 2D verwenden. Die FreeImage-Bibliothek wird nur in dieser Demo dazu verwendet, PNG-Bilder zu laden. Sie können auch die Units "AdPNG" und "AdDevIL" statt "AdFreeImage" ausprobieren.
Fehler 4:
/usr/bin/ld: -lGL kann nicht gefunden werden
Lösung 4:
Wieder der falsche Name für die Bibliotheksdatei. Erzeugen Sie eine symbolische Verknüpfung:
sudo ln -s /usr/lib/libGL.so.1 /usr/lib/libGL.so
Ab hier kompiliert das Projekt erfolgreich auf meinem System. Aber es stürzt ab, wenn es ausgeführt wird.
Fehler 5:
Exception while creating process: Executable not found: "xterm"
(
Exception beim Erzeugen des Prozesses: Ausführbare Datei "xterm" nicht gefunden)
Lösung 5:
Installieren Sie xterm mit ihrem Paketmanager. Normalerweise ist es bereits installiert, aber das war auf einer fast neuen kubuntu 8.10-Installation.
Fehler 6:
Exception: No compatible Andorra 2D plugin library found.
(
Exception: Keine kompatible Andorra 2D-Pluginbibliothek gefunden)
Diese
Exception tritt beim folgenden Befhler auf:
Main.pas, 65: AdDraw.DllName := DefaultPlugin
Dieser Fehler ist absolut in Ordnung zu diesem Zeitpunkt, da wir noch keine Plugins kompiliert haben. Lassen Sie uns zum nächsten Teil kommen.
Erzeugen der Andorra-Pluginbibliothek - Teil 1
Öffnen Sie das andorraOGL-Projekt:
~/program/andorra/src/dll/opengl/andorraOGL.lpi
Gehen Sie zu Projekt->Projektoptionen und ändern Sie den Namen des erzeugten Kompilats von:
../../../bin/AndorraOGLLaz.dll
nach:
../../../bin/libAndorraOGLLaz.so
Versuchen Sie, das Projekt mit Strg-F9 zu erzeugen.
An dieser Stelle sollte das Projekt erfolgreich kompilieren, wenn Sie einen i386 verwenden und Sie können mit "Erzeugen eines Testprojekts - Teil 2" fortfahren.
Wenn Sie ein 64 Bit-System verwenden, gibt es noch ein paar Probleme zu lösen.
Fehler 7:
/usr/bin/ld: ~/program/andorra/src/dcu/AdClasses.o: relocation R_X86_64_32S against _$ADCLASSES$_Ld1' can not be used when making a share object; recompile with -fPIC
(
/usr/bin/ld: ~/program/andorra/src/dcu/AdClasses.o: Relokation R_X86_64_32S gegen _$ADCLASSES$_Ld1' kann nicht verwendet werden, wenn ein gemeinsam genutztes Objekt erzeugt wird; Kompilieren Sie noch einmal mit -fPIC.)
Lösung 7:
Ich weiß nicht genau, worum es da geht, aber lassen Sie uns einfach dem Rat folgen und mit "-fPIC" neu kompilieren. Gehen Sie zu Projekt->Compilereinstellungen->Andere und schreiben Sie -fPic in das Feld für benutzerdefinierte Optionen.
Jetzt sollte das Projekt richtig kompilieren, aber es müssen immer noch einige Probleme gelöst werden, bevor es wirklich funktioniert. Wir kommen gleich dazu!
Erzeugen eines Testprojekts - Teil 2
Also Sie das AndorraOGL-Projekt oben erzeugt haben, hat es eine Pluginbibliotheksdatei in Andorras bin-Verzeichnis (~/program/andorra/bin) erstellt. Wir brauchen diese Datei, um das Testprojekt zum Laufen zu bekommen, also kopieren Sie die Bibliotheksdatei in Ihr Projektverzeichnis:
cp ~/program/andorra/bin/libAndorraOGLLaz.so ~/program/andorra/demos/Simple/SimpleNonVCL/
Öffnen Sie erneut das das SimpleNonVCL-Projekt in Lazarus und drücken Sie F9 um zu versuchen, es auszuführen.
Wenn Sie einen i386 verwenden, sollte dieses mal alles funktionieren und sie sollten ein schwarzes Fenster mit einem Andorra-Logo und einem Text, der den Mauszeiger verfolgt, sehen.
Wenn Sie immer noch eine
Exception bei der Zuweisung von DllName erhalten, können Sie versuchen, diese Zeile von:
AdDraw.DllName := DefaultPlugin
nach:
AdDraw.DllName := './libAndorraOGLLaz.so'
zu ändern. Wenn Sie jedoch einen amd64 verwenden, werden Sie eine
Exception bei der Initialisierung von
OpenGL erhalten.
Fehler 8:
Main.pas: AdDraw.Initialize ->
AdDraws.pas, 1453: AdAppl.Initialize(FWnd) ->
OGLMain.pas, 249: InitOpenGL ->
dglOpenGL, 8848: glXGetProcAddress := glProcedure('glXGetProcAddress');
dglOpenGL, 8809: Result := GetProcAddress(LibHandle, ProcName);
dglOpenGL, 8702: Result := dlsym(Pointer(LibHandle), ProcName);
Der Fehler tritt in der Funktion LoadLibrary auf, in der der Rückgabewert von dlopen auf ein THandle gecastet wird. Das Problem ist, dass THandle als 32 Bit groß definiert ist, aber der Rückgabewert 64 Bit groß ist.
Delphi-Quellcode:
function LoadLibrary(Name: PChar): THandle;
begin
Result := THandle(dlopen(Name, RTLD_LAZY));
end;
Also müssen wir das in der Pluginbibliothek ändern.
Erzeugen der Andorra-Pluginbibliothek - Teil 2
Öffnen Sie das andorraOGL-Projekt noch einmal.
Lösung 8:
Die Lösung ist, eine neue Typendefinition von THandle überall hinzuzufügen, wo es auftaucht:
~/program/andorra/src/dll/opengl/OGLShader.pas:
118: function TOGLShaderSystem.LoadShaderPlugin(AID: TAdVeryShortString): boolean;
119: type // Added
120: THandle = Int64; // Neu
~/program/andorra/lib/dglOpenGL.pas:
225: type
226: THandle = Int64; // Neu
Dieser Fehler sollte bei neuen Versionen von Andorra 2D (neuer als 0.4.5.1) behoben sein.
Nun sollten Sie in der Lage sein, das Projekt erfolgreich zu kompilieren und eine gültige 64 Bit-Pluginbibliothek zu kompilieren. Mit der neuen Version von libAndorraOGLLaz.so sollte es auch möglich sein, das Testprojekt erfolgreich zu kompilieren und auszuführen!
Ich habe mich durch die Tutorials auf der Andorra-Webseite gearbeitet und bist jetzt habe ich das Sprite-Engine-Tutorial ohne (größere) Probleme abgeschlossen.
Hinweis: THandle wird auch in einigen anderen Dateien verwendet. (suchen Sie einfach danach) Es ist wahrscheinlich eine gute Idee, seine Neudefnition auch zu ihnen hinzuzufügen, aber die Änderungen oben sind genug, um alles erstmalig zum Laufen zu bekommen.