Typ: Tutorialserie
Artikel Name: Teil3: erweiterte Lazarusinstallation - Linux
Autor: monta
Beschreibung: Crosscompiling von Linux zu Windows
Erstellen der Crosscompiling-Umgebung
Hierbei gibt es einen gravierenden Unterschied zu älteren Versionen vom FPC. Musste man bei alten Versionen für die Erstellung von Windowsanwendungen unter Linux ein extra Paket FPC-Cross... installieren, so bringt der FPC 2.2.0 schon alle benötigten Elemente mit, um mit wenigen Befehlen und ein bisschen Anpassung der fpc.cfg aus den Freepascalsourcen einen lauffähigen Crosscompiler von Linux auf Windows zu erstellen.
Zunächst benötigt man dazu jedoch das komplette Packet der FPC-Sourcen. Da wir bereits ein entsprechendes Verzeichnis mit allen FPC-Sourcen angelegt haben (siehe Teil 2), können wir dies nun gleich nutzen.
In diesem öffnet man nun ein Teminal und gibt folgendes ein:
Code: Alles auswählen
~ su
# make all OS_TARGET=win32 CPU_TARGET=i386
# make crossinstall OS_TARGET=win32 CPU_TARGET=i386
# exit
~ exit
danach sollte in usr/local/lib/ ein Ordner namens fpc vorhanden sein, in welchem unter 2.2.0/units/i386-win32 die neu erstellten Untis für das crosscompiling zu Windows zu finden sind.
Anpassung der fpc.cfg
Nun muss allerdings noch eine Anpassung an der in /etc zu findenden fpc.cfg vorgenohmen werden, damit der FPC auch Klarheit darüber hat, wo er die entsprechenden Units für Windows finden kann. Ohne diese Änderung greift er automatisch auf die Linuxunits zu, wodurch natürlich keine Kompilierung für Windows möglich ist.
Da normale Nutzer unter /etc kein Schreibrecht haben ist es nötig, die Datei mit Adminrechten zu öffnen, wie das geht, sei den einzelnen Plattformen/Desktops überlassen.
[Unter XFCE im Terminal su und anschließend thunar, dann kann man mit Adminrechten durch Dateisystem ziehen und in /etc die fpc.cfg editieren. Ebeso kann man in KDE Konquero aus dem Terminal heraus mit Rootrechten starten]
Folgende Änderung muss in der fpc.cfg eingefügt werden:
Relativ weit unten finden sich in der Standardmäßig installierten fpc.cfg folgende Zeilen:
# searchpath for units and other system dependent things
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl
#-Fu~/fpc/packages/base/*/units/;~/fpc/fcl/units/;~/fpc/rtl/units/
Diese Eintragungen sollten wie folgt erweitert werden:
# searchpath for units and other system dependent things
#IFDEF win32
-Fu/usr/local/lib/fpc/2.2.0/units/i386-win32/
-Fu/usr/local/lib/fpc/2.2.0/units/i386-win32/*
-Fu/usr/local/lib/fpc/2.2.0/units/i386-win32/rtl
-XPi686-mingw32-
-FD/usr/local/lib/fpc/2.2.0
#ELSE linux
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl
#-Fu~/fpc/packages/base/*/units/;~/fpc/fcl/units/;~/fpc/rtl/units/
#ENDIF
Somit wird der FPC angewiesen, für das 'normale' Erstellen von Linuxanwendungen auf die schon vorher eingestellten Units in /usr/lib... zuzugreifen, während dessen er für das erstellen von Windowsprogrammen im Verzeichnis /usr/local/lib/fpc... fündig wird.
Anschließend sollte man in der Lazaruside den unter Ungebungseinstellungen den Pfad auf das oben ausgecheckte Quellverzeichnis des FPC legen.
Nachdem der FPC in der Lage ist, Windowsanwendungen zu compilieren, muss noch Lazarus entsprechend angepasst werden.
Dazu geht man in Lazarus auf Werkzeug >> Lazarus erstellen einrichten...
und wählt im erscheinenden Dialog den Reiter Erweiterte Build-Optionen
Innerhalb dieses Dialogs müssen folgende Einstellungen gesetzt werden (wie auch im Bild zu sehen):
- LCL, SynEdit, CodeTools, Package-Registrierung IDE-Schnittstellen müssen auf Clean and Build gesetzt werden
- JIT-Form, IDE, Starter und Beispiele müssen hingegen auf none gesetzt sein
- Bei LCL-Schnittstelle wählt man win32/win64 aus
- Zielbetriebssystem wird ebenfalls win32 angegeben
Da Laz die erstellten Units automatisch für jede LCL-Schnittstelle (Widgetset) in eigene Unterordner packt, ist es nicht jedesmal nötig, die entpsrechenden Komponenten neu zu erstellen, wenn das Projekt anstatt für Windows wieder für Linux erstellt werden soll.
Allerdings sollte man bei änderungen an den Lazarus-Sourcen, beispielsweise durch ein update aus dem SVN, alle verwendeten Schnittstellen neu erstellen, da es sonst zu Fehlern aufgrund der Unterschiedlichen Dateiversionen kommen kann.
Möchte man nun ein Projekt für Windows unter Linux erstellen, müssen zwei umstellungen an den Compilereinstellungen vorgenohmen werden.
Dazu ruft man über Projekt >> Compilereinstellungen... den entsprechenden konfigurationsdialog auf.
In diesem müssen nun zwei Eintragungen geändert werden, um ein unter Windows lauffähiges Programm zu erstellen:
- im Reiter Pfade muss die Einstellung LCL-Schnittstelle auf win32/win64 gesetzt werden
- auf dem Reiter Quelltext muss das Zielbetriebssytsem auf Win32 eingestellt werden
Anschließend kann man das Projekt über Start >> Erstellen neu bauen, woraufhin sich im Ausgabeordner eine unter Windows lauffähige exe befindet. Logischer Weise ist dieses Programm unter Linux nicht ohne Hilfsmittel ausführbar, weshalb es auch zu einem Fehler kommt, wenn man statt nur auf Erstellen zu gehen, das Projekt über F9 bzw. Start gleich ausführen möchte.