[gelöst] Crosscompiling Windows unter Linux - Step By Step

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 993
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:

[gelöst] Crosscompiling Windows unter Linux - Step By Step

Beitrag von kralle »

Hallo,

wenn man unter Linux Windows-Programme erstellen will, muß man die IDE ja entsprechend vorbereiten.
Dazu gibt es dann verschiedene Informationen.

Im Wiki http://wiki.lazarus.freepascal.org/Cross_compiling_for_Win32_under_Linux heißt es für FPC:
Why *nix to Windows and not the other way around

The main reason for this is that generating Linux/Unix binaries on a foreign platform (even another Unix or Linux system) is more complicated. Static linking is already complicated, let alone shared.

You would need the used libraries from the target platform (gtk, glib, libc etc), and a lot of additional configuring for ld (library paths, dynlinker path etc).

This has been partially done (for the static case), but it is hard since it needs manual postediting of linker files and linker commandline, and a deep understanding about what makes Unix binaries tick.
Newer FPCs - 2.1.1 and newer

If you are compiling a 2.1.1 or newer version of FPC you can just do:

$ make all OS_TARGET=win32 CPU_TARGET=i386

and then

$ su -c "make crossinstall OS_TARGET=win32 CPU_TARGET=i386"

Note-icon.png

Note: make crossinstall by default installs all files in /usr/local/lib/fpc/$fpcversion/units directory that's why you will need to add to /etc/fpc.cfg file new search path -Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget. Other option is to use INSTALL_PREFIX=/usr while performing crossinstall in this case you will not need to change anything in /etc/fpv.cfg file because all will be instaled in /usr/lib/fpc/$fpcversion/units witch is alredy there
Note-icon.png

Note: To build for win64 the make command is: make all OS_TARGET=win64 CPU_TARGET=x86_64

The reason for this simplicity is the internal linker included in this version of fpc.

und für Lazarus:
Lazarus/LCL
Cross compiling the LCL and Lazarus components

The IDE automatically cross compiles all used packages when you change the target of your project and build it.
Cross compiling a project

In Project->Compiler Options->Code, set the Target OS to 'win32' and in Paths the 'LCL Widget Type' to win32. That's all. The next time you build, you will create a win32 executable.

The IDE will rescan for win32 units, so that 'Find declaration' and code completion features will now work with the win32 rtl instead of the linux rtl. When you open another project or reopen this project the IDE will automatically switch.


In einem Beitrag hier im Forum http://www.lazarusforum.de/viewtopic.php?f=3&t=8990 schrieb "theo"
Ich würde den FPC selber kompilieren, dann die gewünschten crossinstalls dazu.
Bei mir geht das z.B. so, da ich den Compiler (trunk) unter Home habe:

Code: Alles auswählen

make all crossinstall OS_TARGET=win64 CPU_TARGET=x86_64 INSTALL_PREFIX=~/lazarus/fpc


und meint dann weiter auf Lazarus 1.5 bezogen:
Wenn man alles eingerichtet hat, muss man nur noch auswählen. Bei mir sieht es so aus:


Und zeigt ein Bild der IDE, wo man einfach das Ziel OS auswählen kann.

Nur wie man in den IDE-Einstellungen alles konfiguriert, finde ich nichts.

Ich habe jetzt mal auf einem Notebook "Linux Mint17.3" und Lazarus installiert.
Für die Installation von Lazarus nahm ich dieses Script aus dem "Blaise Pascal Magazin 48" (der Author hat der Veröffentlichung zugestimmt):

Code: Alles auswählen

#!/bin/bash
#
# run in your HOME-directory with: sudo sh getlaz.sh  (HR)
#
# (C)by: Michael Van Canneyt (michael@freepascal.org)
#
# Release from: 2016-01-30  (HR)
# additional comments from: Heiko Rompel (HR)
########################################################
# Some variables. Set this to whatever you want
########################################################
#
# Where to download/install everything ? (below home directory)
#
INSTALLDIR=fpc
#
# Which FPC version to use ?
#
VERSION=3.0.0
CPUARCH=`uname -p`
#
# Install FPC/Lazarus as root ? (YES or NO)
#
USEROOT=YES
#
# Which lazarus version ?
# set either tag or branch variable.
# If neither is set, trunk is used.
# When lazarus 1.6 is out, this becomes lazarus_1_6
#
# A newer RC is out (HR)
TAG=lazarus_1_6_RC2/
BRANCH=
 
#########################################################
# No variables after this point.
#########################################################
#
# Install preliminaries. This must be done as root.
#
sudo apt-get install subversion make binutils gdb gcc libgtk2.0-dev
 
#
# Check if the rest must be done as root.
#
if [ "$USEROOT" = YES ]; then
  SUDO=sudo
fi
#
#######################################################################
# Get and install FPC.
#######################################################################
#
# Create installation directory
#
mkdir ~/$INSTALLDIR
cd ~/$INSTALLDIR
#
# Fetch the necessary files for FPC.
#
wget ftp://ftpmaster.freepascal.org/pub/fpc/dist/$VERSION/source/fpc-$VERSION.source.tar.gz
wget ftp://ftpmaster.freepascal.org/pub/fpc/dist/$VERSION/$CPUARCH-linux/fpc-$VERSION.$CPUARCH-linux.tar
#
# extract installer.
#
tar xvf fpc-3.0.0.$CPUARCH-linux.tar
cd fpc-3.0.0.$CPUARCH-linux
#
# Install FPC (possibly as root)
#
$SUDO sh ./install.sh
#
# Extract sources.
#
cd ~
tar xvzf $INSTALLDIR/fpc-$VERSION.source.tar.gz
cd ~/$INSTALLDIR
#
#######################################################################
# Get and install Lazarus
#######################################################################
#
# Determine SVN url
#
BASEURL=http://svn.freepascal.org/svn/lazarus/
#
if [ ! -z "$TAG" ]; then
  SVNURL=$BASEURL/tags/$TAG
else
  if [ ! -z "$BRANCH" ]; then
    SVNURL=$BASEURL/branches/$BRANCH
  else
    SVNURL=$BASEURL/trunk
  fi 
fi 
#
# Check out sources
#
svn co $SVNURL lazarus
#
# Build the IDE
#
cd lazarus
make bigide
#
# Install lazarus (possibly as root)
#
$SUDO make install
#
# That's all folks !
#
 


Wie wäre es, wenn das vielleicht noch ein paar z.B. in einer VM so aufsetzen und wir zusammen StepByStep erklären wie man FPC und Lazarus einrichtet und wie man dann z.B. Wine mit einbindet um die Programme auf dem Linux-PC zu testen.
Wenn wir das alles zum laufen haben, dann wäre der nächste Schritt, z.B. eine Verbindung zu einem Windows PC einzurichten um den Code auf einem echten Windows zu debuggen.
Ansschließend könnte man sich dann noch Android und Mac zu wenden.

Was meint Ihr?

Gruß Heiko
Zuletzt geändert von kralle am Mi 17. Feb 2016, 15:17, insgesamt 1-mal geändert.
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

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:

Re: Crosscompiling Windows unter Linux - Step By Step

Beitrag von Christian »

Es ist hyper einfach Lazarus in Wine zu installieren und es läuft dort exakt wie unter Windows. Man kanns auch gut mit winecmd in Scripten unterbringen (lazbuild in wine laufen lassen und windows Executables baun)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 993
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 Windows unter Linux - Step By Step

Beitrag von kralle »

Hallo Christian,

Christian hat geschrieben:Es ist hyper einfach Lazarus in Wine zu installieren und es läuft dort exakt wie unter Windows. Man kanns auch gut mit winecmd in Scripten unterbringen (lazbuild in wine laufen lassen und windows Executables baun)

Das ist eine leider immer mehr typische Antwort.
Es geht; funktioniert super; alles ohne Probleme; total einfach usw., aber wo ist die Step By Step Anleitung um die es hier geht? Genau die fehlt.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Crosscompiling Windows unter Linux - Step By Step

Beitrag von Michl »

Ich habe eben mal auf die von dir verlinkte Seite http://wiki.lazarus.freepascal.org/Cross_compiling_for_Win32_under_Linux geschaut. Es gibt zur Zeit noch keine deutsche Übersetzung. Der mMn beste Weg für diese Aufgabe wäre es (zumindest handhabe ich es so), die englische Seite ins deutsche zu übersetzen, dabei die Gültigkeit der Aussagen zu überprüfen und dem aktuellen Stand anzupassen. Wenn die Seite fertig ist, sollten die Aktualisierungen noch auf der englischen Seite gemacht werden. Das ist zwar einiges an Arbeit, nützt aber der Community mMn am meisten.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 993
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 Windows unter Linux - Step By Step

Beitrag von kralle »

Hallo Michl,

Michl hat geschrieben:Ich habe eben mal auf die von dir verlinkte Seite http://wiki.lazarus.freepascal.org/Cross_compiling_for_Win32_under_Linux geschaut. Es gibt zur Zeit noch keine deutsche Übersetzung. Der mMn beste Weg für diese Aufgabe wäre es (zumindest handhabe ich es so), die englische Seite ins deutsche zu übersetzen, dabei die Gültigkeit der Aussagen zu überprüfen und dem aktuellen Stand anzupassen. Wenn die Seite fertig ist, sollten die Aktualisierungen noch auf der englischen Seite gemacht werden. Das ist zwar einiges an Arbeit, nützt aber der Community mMn am meisten.

Das kann man ja auch machen, aber bevor man dort etwas Ändert, sollte man es doch zum Laufen bekommen haben und darum geht es mir hier.

Wenn wir in diesem thread sagen:"Das war's, jetzt läuft es.", dann nimmt man sich den Wiki-Eintrag vor.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Crosscompiling Windows unter Linux - Step By Step

Beitrag von theo »

kralle hat geschrieben:und meint dann weiter auf Lazarus 1.5 bezogen:
Wenn man alles eingerichtet hat, muss man nur noch auswählen. Bei mir sieht es so aus:


Und zeigt ein Bild der IDE, wo man einfach das Ziel OS auswählen kann.

Nur wie man in den IDE-Einstellungen alles konfiguriert, finde ich nichts.

Wer sucht, der findet :wink:
http://wiki.lazarus.freepascal.org/IDE_ ... _Overrides
Dateianhänge
lazidemac.png

Mathias
Beiträge: 6193
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Crosscompiling Windows unter Linux - Step By Step

Beitrag von Mathias »

Ich habe die Cross-Kompilierung auch schon versucht, aber nach mehreren Fehlschlägen habe ich es aufgegeben.
Das einfachste ist, wie oben schon geschrieben, ein zweites Lazarus in Wine zu installieren.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 993
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 Windows unter Linux - Step By Step

Beitrag von kralle »

Hallo Mathias,

Mathias hat geschrieben:Ich habe die Cross-Kompilierung auch schon versucht, aber nach mehreren Fehlschlägen habe ich es aufgegeben.
Das einfachste ist, wie oben schon geschrieben, ein zweites Lazarus in Wine zu installieren.

Wenn ich "diesen Weg" gehen will, dann nutze ich unter Linux ein Windows 7,8 oder 10 in einer VM.
Da es aber auch so gehen soll, möchte ich einfach nur wissen wie.
Also, was muß ich wo in die IDE-Konfiguration eintragen, damit ich Programme für Linux 32 und 64Bit und Windows 32 und 64Bit erstellen kann und die im Projektverzeichnis in entsprechenden Unterordnern laden.
Dazu gehört natürlich auch das Debug, wozu dann wohl Wine nötig wäre.
Außerdem, möchte ich die IDE so einstellen, das bei einem Fehler in meinem Projekt-Code gestoppt wird und nicht in einer der unzälligen Pascal-Dateien die zu Freepascl/Lazarus dazu gehören.

Wenn ich die Sachen konfiguriert bekomme, dann wäre ich erstmal froh und könnte dann dieses "Wissen" von mir aus auch in das Wiki einpflegen.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Crosscompiling Windows unter Linux - Step By Step

Beitrag von theo »

kralle hat geschrieben:Dazu gehört natürlich auch das Debug, wozu dann wohl Wine nötig wäre.

Debuggen mit der Linux IDE via Wine geht afaik nicht, das wäre eine Umleitung zuviel.

Linux IDE -> WINE -> GDB -> EXE

Lasse mich gern eines besseren belehren.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 993
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 Windows unter Linux - Step By Step

Beitrag von kralle »

Hallo theo,

theo hat geschrieben:Debuggen mit der Linux IDE via Wine geht afaik nicht, das wäre eine Umleitung zuviel.

Linux IDE -> WINE -> GDB -> EXE

Lasse mich gern eines besseren belehren.

Wie machen den die Jungs von CodeTyphon das denn?
Damit soll das ja auch gehen.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Crosscompiling Windows unter Linux - Step By Step

Beitrag von theo »

kralle hat geschrieben:Hallo theo,
Wie machen den die Jungs von CodeTyphon das denn?
Damit soll das ja auch gehen.


Keine Ahnung. Ich kenne CT nicht.
Wozu brauchst du denn das? Eine Cross Platform Anwendung kannst du ja auch unter Linux direkt debuggen und richtiges "Windows Zeug" mache ich eh unter Windows.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 993
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 Windows unter Linux - Step By Step

Beitrag von kralle »

Hall theo,

theo hat geschrieben:Wozu brauchst du denn das? Eine Cross Platform Anwendung kannst du ja auch unter Linux direkt debuggen und richtiges "Windows Zeug" mache ich eh unter Windows.

Ich überlege komplett auf Linux umzusteigen. Was mich im Moment daran hindert ist Lazarus und das erstellen von Windows-Programmen unter linux.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Crosscompiling Windows unter Linux - Step By Step

Beitrag von theo »

kralle hat geschrieben:Hall theo,
Ich überlege komplett auf Linux umzusteigen. Was mich im Moment daran hindert ist Lazarus und das erstellen von Windows-Programmen unter linux.

Erstellen und Ausführen geht ja. Wenn du die IDE unter Wine betreibst, kannst du wahrsch. auch mit GDB debuggen.
Sonst wie gesagt einfach die Linux Version debuggen.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Crosscompiling Windows unter Linux - Step By Step

Beitrag von MacWomble »

Ich entwickle ausschließlich in Linux. In der Regel reicht wine, falls ich ein Programm mal für Windows benötige (kommt selten vor, meine Kunden arbeiten fast ausschließlich mit Linux).
Für knifflige Sachen oder wenn ich in Windows debuggen will, habe eine Virtualbox mit W7/Codetyphon im Hintergrund.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Mathias
Beiträge: 6193
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Crosscompiling Windows unter Linux - Step By Step

Beitrag von Mathias »

Ich überlege komplett auf Linux umzusteigen. Was mich im Moment daran hindert ist Lazarus und das erstellen von Windows-Programmen unter linux.

Ich bin auch seit gut einem auf Linux umgestiegen, bis jetzt hatte ich noch keinen Engpass.
Ich hatte gewisse alte Programme, die noch uses Windows hatten, die konnte ich überall durch etwas Platformübergreifendes ersetzen.
Somit laufen jetzt fast alle Programme mit Linux und Windows. Somit kann ich mit der Wine-Lazarus-Lösung sehr gut leben.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten