Teil3: erweiterte Lazarusinstallation - Linux

Antworten
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Teil3: erweiterte Lazarusinstallation - Linux

Beitrag von monta »

Kategorie: montas Tutorialserie zu Linux
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
Bild
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
Anschließend werden die entsprechenden Elemente durch Klick auf erstellen neu erstellt.

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.

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Teil3: erweiterte Lazarusinstallation - Linux

Beitrag von Maik81ftl »

Sehr gut beschrieben! aber wie schaut es in dem Fall aus, wenn max Plattformübergreifend Proframmieren will?

Windows / SuSe / Ubuntu?

reicht es da aus, wenn man nur die Compilereinstellung ändert oder muß na auf die fpc wieder geändert werden?

Frage auf dem grund, da in meinem Haushalt Ubuntu 10.04, WIn7 und später Xp, SuSe 10.3 und 11.2 hinzukommen.

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Teil3: erweiterte Lazarusinstallation - Linux

Beitrag von Teekeks »

Der Unterschied zwischen Ubuntu und SuSe ist wirklich nur Minimal: es können die selben Kompilate genutzt werden (es sind ja nur unterschiedliche Grafische Oberflächen für das selbe Betriebssystem)

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Teil3: erweiterte Lazarusinstallation - Linux

Beitrag von Maik81ftl »

und wenn ich denne für WIn und Linux parallel schreibe brauch ich nur die Projekteigenschaft z ändern mehr nicht?

ok... denne mal bei gel. änderen tu.

Antworten