Cross-Compilieren

Für Dinge zum Forum, Kritik, Verbesserungsvorschläge, Umfragen und ähnliches.
Antworten
mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Cross-Compilieren

Beitrag von mschnell »

Ich weiß, dass das Thema schon öfters besprochen worden ist, und ich habe auch selber (mit Linux und unterschiedlichen CPUs, relativ erfolglos) daran geforscht, aber ich habe erst jetzt einen konkreten vermutlich relativ üblichen und einfach lösbaren Anwendungs-Fall.

Ich habe Lazarus und fpc "Out of the box" (also nicht die svn-Version, mit der ich auf Linux manchmal Basis-Entwicklungen mache) auf Windows10 64 Bit installiert. Also die 64 Bit Lazarus/fpc Variante.

Nun möchte (muss) ich ein fertig getestetes Programm für Windows 32 Bit übersetzen.

Man kann ja das Ziel-Betriebssystem (und die Ziel-CPU-Familie und den Ziel-Prozessor) in den Projekt-Optionen einstellen, aber natürlich sind die FPC-Dateien dafür nicht da.

Fehlermeldung:
Compiler "C:\lazarus\fpc3.0.0\bin\x86_64_win64\fpc.exe" unterstützt nicht das Ziel i386-win32

Hat jemand einen gradlinig beschreibbaren funktionierenden Weg gefunden, das an's Laufen zu bringen ?

-Michael

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Cross-Compilieren

Beitrag von m.fuchs »

Lösung ohne Cross-Compiling: Installiere ein 32-Bit-Lazarus parallel.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: Cross-Compilieren

Beitrag von Aliobaba »

Lazarus auf einen Windows32-Bit-Rechner installieren. (evtl. mit VirtualBox oder VMWare "innerhalb Linux")
Quelldatei dorthin kopieren.
Evtl. einige Compiler-Optionen in den Quellcode eingeben.
Compilieren.
8) :cry:
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: Cross-Compilieren

Beitrag von Aliobaba »

@m.fuchs: Aber "mschnell" möchte doch ein Windows-Programm?
..uuups, "mschnell" geht ja von Windows10 aus, sorry! (nachträglich ergänzt)
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Cross-Compilieren

Beitrag von mschnell »

Aliobaba hat geschrieben:](... evtl. mit VirtualBox oder VMWare "innerhalb Linux" .... )


Hast Du noch eine Windows Lizenz übrig ???? :D :( :( :D

M$ erlaubt ja nicht dieselbe Lizenz in einer Virtual Box auf demselben Rechner zu verwenden.

-Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Cross-Compilieren

Beitrag von mschnell »

m.fuchs hat geschrieben:Lösung ohne Cross-Compiling: Installiere ein 32-Bit-Lazarus parallel.


Wird vermutlich gehen. Finde ich aber wenig elegant.

-Michael

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

Re: Cross-Compilieren

Beitrag von Michl »

Das einfachste ist sicherlich, wie oben geschrieben, als Zweitinstallation die 32bit Version zu installieren.

Aber wenn du ein Crossinstall trotzdem probieren willst, noch eine Ergänzung: Soviel ich weiß, benötigt man zum kompilieren des FreePascal-Compilers selbst, die letzte stabile FPC-Version. Das ist für FPC 3.0.0 der Compiler 2.6.4. Für FPC-Trunk geht FPC 3.0.0.
Eine compile.bat für 32->64bit könnte so aussehen (ich nutze 32bit zum entwickeln, aufgrund des stabileren Debuggers):

Code: Alles auswählen

set TrunkPath=C:\FPCTrunk
set FPCTrunkPath=%TrunkPath%\fpc
set BootstrapCompilerPath=%TrunkPath%\binutils
set PATH=%BootstrapCompilerPath%;%PATH%
cd %FPCTrunkPath%
make clean
make all install INSTALL_PREFIX=%FPCTrunkPath% PP=%BootstrapCompilerPath%\ppc386.exe
make crossinstall CPU_TARGET=x86_64 OS_TARGET=win64 INSTALL_PREFIX=%FPCTrunkPath% PP=%BootstrapCompilerPath%\ppc386.exe
cd %FPCTrunkPath%\bin\i386-win32
fpcmkcfg -d basepath=%FPCTrunkPath% -o .\fpc.cfg

Für 64->32bit sollte es so funktionieren (ungetestet):

Code: Alles auswählen

make crossinstall CPU_TARGET=i386 OS_TARGET=win32 INSTALL_PREFIX=%FPCTrunkPath% PP=%BootstrapCompilerPath%\ppcx64.exe

Code: Alles auswählen

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

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Cross-Compilieren

Beitrag von m.fuchs »

mschnell hat geschrieben:Hast Du noch eine Windows Lizenz übrig ???? :D :( :( :D
M$ erlaubt ja nicht dieselbe Lizenz in einer Virtual Box auf demselben Rechner zu verwenden.

Wenn du parallel installierst brauchst du keine zusätzliche Lizenz.

mschnell hat geschrieben:
m.fuchs hat geschrieben:Lösung ohne Cross-Compiling: Installiere ein 32-Bit-Lazarus parallel.

Wird vermutlich gehen. Finde ich aber wenig elegant.

Das tut mir leid. Aber was stört dich denn? Parallelinstallationen werden ja vom Windows-Installer explizit unterstützt. Warum sich dann die Mühe machen und den Cross-Compiler konfigurieren?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

deadc0de
Beiträge: 56
Registriert: So 24. Jan 2016, 18:31
OS, Lazarus, FPC: Windows(10,8.1,7), Archlinux, Debian
CPU-Target: 64Bit + 32Bit
Wohnort: Winnenden
Kontaktdaten:

Re: Cross-Compilieren

Beitrag von deadc0de »

mschnell hat geschrieben:
Aliobaba hat geschrieben:](... evtl. mit VirtualBox oder VMWare "innerhalb Linux" .... )


Hast Du noch eine Windows Lizenz übrig ???? :D :( :( :D

M$ erlaubt ja nicht dieselbe Lizenz in einer Virtual Box auf demselben Rechner zu verwenden.

-Michael


Man brauch aber Theoretisch keine Lizenz in einer VM, da man dort einfach den Testzeitraum von Windows nutzen kann und dann neu Installieren kann. Oder man bekommt halt keine Updates mehr, was beim Compelieren nicht schlimm ist.

Zum Thema kann ich nur sagen, lade doch mal die FPC WIN32 Dateien herunter und Kopiere sie in den entsprechenden Pfad. Das wäre meine Idee dazu. Getestet habe ich das ganze nicht, aber ich nutze ja auch nur die 32Bit Version von Lazarus.

LG
Rene Steiner
Wissen ist Macht und ich weis, das ich nichts weis

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Cross-Compilieren

Beitrag von marcov »

ich glaube <nicht x86>-> 32-bit x86 funktioniert gar nicht weil der 32-bit cg 80b-it extended benutzt, was andere Architekturen nicht unterstützen.

Antworten