Crosscompiling Linux > Windows

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:

Crosscompiling Linux > Windows

Beitrag von monta »

Kategorie: Tipps und Tricks
Typ: Tutorial

Artikel Name: Crosscompiling Linux > Windows
Autor: monta
Beschreibung: Wie man unter Linux Windowsprogramme erstellen kann


Ziel des Tutorials ist es, unter Linux Windowsanwendungen zu kompilieren.
Das Tutorial basiert dabei auf OpenSuse, es sollte jedoch ein leichtes sein, es auch auf andere Linuxdistributionen zu übertragen, da sich lediglich die direkte Package-Installation unterscheiden dürfte. Die Konfiguration von Lazarus ist hingegen für verschiedene Distributionen identisch.



Doch wozu das ganze?

Zum einen arbeiten einige ständig mit Linux und haben so keine lauffähige Windowsinstallation zum Entwickeln zur Verfügung, möchten allerdings dennoch ihre Anwendung auch für Windows zur Verfügung stellen. Zum anderen wird es dadurch sehr erleichertert, für Linux und Windows parallel zu entwickeln, ohne immer ein neues Betriebssystem starten zu müssen, oder Windows innerhalb einer VM zu betreiben.
Abgesehen davon, gestaltet es sich um einiges leichter, unter Linux Windowsanwendungen zu kompilieren, als umgekehrt Linuxbinaries unter Windows zu erstellen.



Es erweist sich als äußerst vorteilhaft, bevor man mit Crosscompiling beginnt, zuerst einmal wine zu installieren. Wine ermöglicht es dabei, die erstellten Windows-Programme unter Linux auszuführen.
Auf die Installation soll hierbei nicht näher eingegangen werden, da wine über die üblichen Installationsprogramme bei Suse und anderen Distributionen bereits mitgeliefert wird:
    Bild



Voraussetzungen

Um Programme für eine bestimmte Plattform zu erstellen benötigt man grundsätzlich einige Plattformspezifische Komponenten. Bei Lazarus sind dies hauptsächlich der Assembler und der Linker. Um nun die benötigten Komponenten zum Erstellen eines Windowsprogrammes unter Linux zur Verfügung zu haben, ist der einfachste Weg die Nutzung des Vorgefertigten Packages fpc_crosswin... welches unter http://sourceforge.net/project/showfiles.php?group_id=89339 heruntergeladen werden kann.
    Bild
Anschließend findet man das Package im entsprechenden Downloadordner und kann es einfach mit Mausklick ausführen.
    Bild
Da die Installation von neuen Packages nur dem root-Nutzer vorbehalten ist, erscheint anschließend der entsprechende Passwortdialog:
    Bild
Nach Eingabe des richtigen Passwortes kann die Installation anschließend gestartet werden...
    Bild
...und irgendwann ist sie auch erfolgreich abgeschlossen.
    Bild
Kommen wir nun zu der Konfiguration von Lazarus:



Konfiguration Lazarus

Nach start der IDE müssen wir nun zuerst die plattformspezifischen Teile neu erstellen. Dazu rufen wir zunächst den Dialog Lazarus erstellen einrichten auf.
    Bild
Innerhalb dieses Dialogs müssen wir folgende Einstellungen setzen:
  • LCL erstellen[/], [i]Codetools erstellen, Synedit erstellen, Package-Registrierung erstellen und IDE-Schnittstellen erstellen müssen auf Clean and Build gesetzt werden
  • JIT Formular erstellen, IDE neu erstellen, Startprogramm erstellen und Beispiele erstellen müssen hingegen auf none gesetzt werden
  • Bei LCL-Schnittstelle wählt man win32 aus
  • als Zielbetriebssytsem wird ebenfalls win32 angegeben

Anschließend wird das Erstellen über den entsprechenden Button gestartet und abgewartet bis die Erstellung erfolgreich ebgeschlossen wurde.
    Bild

    Bild



Die erste Anwendung

Nach dem die nötigen Vorbereitungen getroffen sind, können wir nun damit beginnen unsere eigentliche Windowsanwendung zu erstellen.
    Bild
Damit der Kompiler weiß, wofür er die Anwednung erstellen soll, müssen wir dies über die Compilereinstellungen des Projektes noch festlegen:
    Bild
Auf der Registerseite Pfade muss dazu unter LCL-Schnittstelle win32 ausgewählt werden:
    Bild
Anschließend wechselt man auf die Registerseite Quelltext und trägt bei Zielbetriebssytsem ebenfalls win32 ein.
    Bild
Dies waren alle benötigten Vorbereitungen und man kann nun über Erstellen bzw. Strg + F9 eine unter Windows lauffähige Anwendung erstellen, welche man anschließend im entsprechenden Ordner an der charakteristischen Endung *.exe erkennt.
    Bild



Etwas Luxus
Direktes starten der Anwendnung in wine (muss installiert sein!)

Im Normalfall wird man seine erstellte Anwendung wohl auch betrachten wohlen, was momentan nur über einen externen Start in wine machbar ist.
Außerdem stürtzt die IDE momentan sofort ab, sobald man versucht, die Anwendung mittels Ausführen zu starten, da Linux natürlich keine Windowsanwendungen ausführen kann, führt dies zum sofortigen Crash.

Um nun die Möglichkeit zu haben, die Anwednung direkt aus der IDE heraus auszuführen müssen wir nun noch Startparameter setzen. Dazu rufen wir den entsprechenden Menüpunkt Start > Startparameter... auf.
    Bild
Auf der Registerseite Lokal setzen wir nun folgende Einstellungen:
  • die Option Startprogramm verwenden wird aktiviert
  • in die entsprechende Zeile geben wir folgendes ein: usr/bin/wine $(TargetCmdLine)
    Bild
Nun ist es möglich, die Anwendung direkt aus der IDE heraus in wine auszuführen, und man kann nun recht komfortabel Windowsanwendungen unter Linux erstellen.



Noch ein Wort zum Abschluss, wie man diesen Prozess wieder rückgängig machen kann.

Um eine Anwendung wieder für Linux zu erstellen, müssen lediglich die Einstellungen unter Projekt > Compilereinstellungen geändert werden. So ändert man die LCL-Schnittstelle wieder auf GTK1 (oder eine andere gewünschte) und löscht auf der Registerseite Quelltext die Eintragung des Zielsystems.
Außerdem müssen wir, um das Programm wieder in der IDE ausführen zu können, noch die Startparameter zurücksetzen. Dazu deaktiviert man unter Start > Startparameter die Option Startprogramm verwenden und wählt aus der Liste den vorherigen Eintrag aus, so das das Programm ohne wine direkt gestartet wird.
    Bild
Eine erneute Erstellung der Komponenten ist dagegen nicht nötig, da diese in plattformspezifischen Ordnern gespeichert, und somit die entsprechenden Units nicht überschrieben werden.

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

gutes tutorial :)

saibot
Beiträge: 10
Registriert: Di 29. Mai 2007, 18:21

Beitrag von saibot »

Das Tutorial ist super, aber ich hing anfangs immer an der Stelle wo man auf "Lazarzs erstellen" klickt. Da kam bei mir nicht die im Tutorial beschriebene Meldung, sondern nur so etwas wie "make: leaving directory...".
Was im Tutorial nicht steht (oder für DAUs nicht explizit genug erwähnt wird^^) ist: um Lazarus zu kompilieren, muss es mit root - Rechten gestartet werden. Erst danach funktioniert der Vorgang wie im Tutorial beschrieben.

Nachdem das einmal gemacht wurde, kommt die Meldung aus dem Screenshot im Tutorial auch, wenn man Lazarus ohne root-Rechte kompiliert. Getestet habe ich das unter Suse 10.0 (KDE) und Kubuntu 6.10. Hoffentlich hilft das jemanden, der sonst genauso verweifeln würde, wie ich. :)

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:

Beitrag von monta »

Stimmt, das sollte noch rein, danke für den Hinweis.

Es rührt daher, das ich selbst Lazarus im Home-Verzeichnis installiert habe. Meiner Ansicht nach ist es das beste, unter Linux FPC normal als Package zu installieren und Lazarus aus dem SVN ins Home auszuchecken und dort mit make zu erstellen, sollte ohne Probleme gehen, und man braucht für nichts Rootrechte.
Aber du hast recht, das steht nirgends und bei ner normalen Installation aus den Packages geht es ohne Root nicht.
Johannes

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Eigentlich ein installer Problem, wenn ich das richtig gesehn hab können deb und rpm beide rechte setzen wie sie wollen man könnte also problemlos über den installer das ganze lazarus Verzeichnis für alle beschreibbar machen ?! Überseh ich was ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

digiflash
Beiträge: 1
Registriert: Do 10. Okt 2013, 19:43

Re: Crosscompiling Linux > Windows

Beitrag von digiflash »

Gibt es eigentlich eine Anleitung für die richtige Konfiguration der IDE um Crosscompiling über die IDE selbst zu machen?!
http://wiki.freepascal.org/Cross_compiling/de#Zu_Linux

Habe diese Anleitung gefunden. Will von Linux auf Mac kompilieren.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 985
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Crosscompiling Linux > Windows

Beitrag von kralle »

Moin,
schade das alle Bilder fehlen.
Vielleicht sollte man die Anleitung mal aktualisieren.

Gruß Heiko

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 985
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Crosscompiling Linux > Windows

Beitrag von kralle »

Moin,

eine aktuelle Anleitung für Lazarus 1.6 unter Linux Mint 17.3 findet Ihr hier:
http://www.rompelsoft.de/index.php/download/download/20-anleitungen/104-lazarus-crosscompiling

Gruß Heiko

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 985
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Crosscompiling Linux > Windows

Beitrag von kralle »


Wendigo

Re: Crosscompiling Linux > Windows

Beitrag von Wendigo »

Danke für die Anleitung. Ich habe vorher mehrere Stunden lang vergeblich versucht es hinzubekommen.
Allerdings habe ich zwei Anmerkungen zum PDF:

  • Das Shellscript funktioniert nicht mehr. Der Quellcode von Sourceforge lässt sich nicht herunterladen und das Script bricht an dem Punkt ab an dem auf die heruntergeladenen Dateien zugegriffen werden soll. Allerdings funktioniert der Rest der Anleitung auch wenn man "FPC", "FPC-Src" und "Lazarus" manuell herunter läd und installiert (https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20amd64%20DEB/Lazarus%201.6.2/)
  • Ein paar Punkte sind vertauscht. Man muss zuerst den Softlink setzen und die fpc.cfg anpassen bevor man make aufruft sonst gibt es einen Fehler.

Der Rest der Anleitung ist echt klasse. Hat mir sehr geholfen, jetzt kann ich endlich Windows-Binaries unter Linux erstellen, vielen Dank! :D

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 985
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Crosscompiling Linux > Windows

Beitrag von kralle »

Moin,

Wendigo hat geschrieben:Danke für die Anleitung. Ich habe vorher mehrere Stunden lang vergeblich versucht es hinzubekommen.

Danke.
Wendigo hat geschrieben:Das Shellscript funktioniert nicht mehr. Der Quellcode von Sourceforge lässt sich nicht herunterladen und das Script bricht an dem Punkt ab an dem auf die heruntergeladenen Dateien zugegriffen werden soll.

Also, das kann ich nicht nachvollziehen.
Ich habe gerade, unter Linux Mint 18 mit dem Script (siehe Anhang) ohne Änderungen im Script, "Lazarus 1.7" und "FPC 3.0.0" problemlos installiert.
Wendigo hat geschrieben:Allerdings funktioniert der Rest der Anleitung auch wenn man "FPC", "FPC-Src" und "Lazarus" manuell herunter läd und installiert

Das ist doch wenigestens etwas ....
Wendigo hat geschrieben:Ein paar Punkte sind vertauscht. Man muss zuerst den Softlink setzen und die fpc.cfg anpassen bevor man make aufruft sonst gibt es einen Fehler.

Das werde ich als nächstes Testen.
Nachtrag: Ich habe die Anleitung Schritt für Schritt abgearbeitet und alles lief wie beschrieben.
Ich lege die aktuelle Anleitung für Lazarus 1.7 und FPC 3.0.0 noch mal bei.

Wendigo hat geschrieben:Der Rest der Anleitung ist echt klasse. Hat mir sehr geholfen, jetzt kann ich endlich Windows-Binaries unter Linux erstellen, vielen Dank! :D

Bitte schön.

Gruß HEiko
Dateianhänge
Lazarus XCompiling 1_7.pdf
(629.35 KiB) 376-mal heruntergeladen
getlaz.sh
(2.67 KiB) 362-mal heruntergeladen

Antworten