Crosscompiling von win64 auf win32

Antworten
TheLinuxist
Beiträge: 15
Registriert: Do 9. Sep 2010, 19:44
OS, Lazarus, FPC: Ubuntu 11.04 (L0.9.30, FPC 2.4.2)
CPU-Target: 32/64

Crosscompiling von win64 auf win32

Beitrag von TheLinuxist »

Hallo,

nachdem ich mich jetzt eine Weile auf eigene Faust durchgesucht habe und mir nicht selbst helfen konnte, frage ich hier um Rat. Es geht um folgendes: Ich habe auf meinem Rechner (Win 7 64bit) ein Programm geschrieben, das jetzt auf einem Win XP 32bit ebenso laufen soll. Einfach rüberkopieren und starten geht leider nicht - ungültige Win32-Executable. Daher muss wohl ein Crosscompiler her, da leider der 32bit-Rechner nicht austauschbar ist und ich auf dem auch keine FP/Lazarus-IDE installieren kann.
Die Compiler-Optionen bei Lazarus waren schnell gefunden, aber als ich das Zielsystem gesetzt hatte - 32bit-CPU - wurden auf einmal die Dateien system.ppu, sysutils.ppu, classes.ppu, avl_tree.ppu und zstream.ppu nicht mehr gefunden. Kompiliere ich es ohne diese Einstellung, geht alles ganz normal.
Wo genau erwartet denn der 32bit-FP-Compiler diese Dateien? Muss ich mir die selbst bauen? Namentlich klingt es ja nicht so, als käme mein Projekt ohne diese Dateien aus.
Herzlichen Dank für jede Hilfe.
mit freundlichen Grüßen,

TheLinuxist

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Crosscompiling von win64 auf win32

Beitrag von MAC »

also ich mach das immer folgenermaßen.
Vorab: Es geht warscheinlich sauberer und besser, die methode ist aber einfach :)

1. Installiere Lazarus für Win32.
2. Installiere Lazarus für Win64 in den gleichen ordner.
--> Lazarus64 überschreibt die 32 variante, aber so hat man auch automatisch den FPC für 64 und 32 weil dieser nicht überschrieben wird... (wie gesagt geht bestimmt auch als extra download...)
3. Werkzeuge --> Einstellungen --> Umgebung (ganz oben) --> Dateien (ganz oben) -->
bei Compiler Dateipfad und Pfad zum Make programm:
steht

Code: Alles auswählen

\bin\x86_64-win64\fpc.exe
bzw

Code: Alles auswählen

\bin\i386-win32\fpc.exe
4. eventuell muss man noch unter Projekteinstellungen --> Codegenerierung Zielbetriebssystem umd Zielplatform anpassen...

Code: Alles auswählen

Signatur := nil;

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Crosscompiling von win64 auf win32

Beitrag von Socke »

MAC hat geschrieben:1. Installiere Lazarus für Win32.
2. Installiere Lazarus für Win64 in den gleichen ordner.
Es reicht, wenn du dir den FPC (möglichst in der gleichen Version) auch für nur win32 installierst. Der Free Pascal Compiler für win64 kann — soweit ich weiß — zwar auch schon so für win32 compilieren, aber die ganzen Standard-Units werden nur im Quelltext mitgeliefert.

Die Units, die von Lazarus kommen sollten bei einer ausreichend aktuellen Lazarus-Version automatisch für win32 übersetzt werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

TheLinuxist
Beiträge: 15
Registriert: Do 9. Sep 2010, 19:44
OS, Lazarus, FPC: Ubuntu 11.04 (L0.9.30, FPC 2.4.2)
CPU-Target: 32/64

Re: Crosscompiling von win64 auf win32

Beitrag von TheLinuxist »

Danke euch recht herzlich, da habt ihr wohl mein Wochenende gerettet :D
Gibt's da evtl. eine Möglichkeit, automagisch Builds für 32 und 64 zu erzeugen, sobald ich das Projekt baue? Sonst muss ich immer umstellen, wenn ich Updates baue...
Ich kann mir keine Signatur leisten :-(

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Crosscompiling von win64 auf win32

Beitrag von Socke »

TheLinuxist hat geschrieben:Danke euch recht herzlich, da habt ihr wohl mein Wochenende gerettet :D
Gibt's da evtl. eine Möglichkeit, automagisch Builds für 32 und 64 zu erzeugen, sobald ich das Projekt baue? Sonst muss ich immer umstellen, wenn ich Updates baue...
Möglicherweise geht das mit den neuen Complier-Einstellungen in Lazarus seit Version 0.9.30, aber mit denen kenn ich mich (noch) nicht aus.

Edit: Ansonsten hilft ein kleines Batch-Skript, das das mitgelieferte Lazarus-Tool lazbuild aufruft. Lazbuild übersetzt ein ganzes Lazarus-Projekt, so wie es die IDE tun würde, aber eben auf der Komandozeile; per Parameter kann man auch das Zielbetriebssystem bestimmen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Crosscompiling von win64 auf win32

Beitrag von MAC »

Und wenn es so ein Programm nicht gibt ...

Programmieren wir halt eins :)
ich schau mir das mal an vieleicht lässt sich da was einfach erstellen..

Code: Alles auswählen

Signatur := nil;

TheLinuxist
Beiträge: 15
Registriert: Do 9. Sep 2010, 19:44
OS, Lazarus, FPC: Ubuntu 11.04 (L0.9.30, FPC 2.4.2)
CPU-Target: 32/64

Re: Crosscompiling von win64 auf win32

Beitrag von TheLinuxist »

Na ja, jedenfalls danke euch allen. Das Programm ist fertig und portiert. Wäre toll, wenn da noch mehr automatisch gehen würde, aber so tut es schon: Ein 64bit-Build zum testen (das geht ja schnell, da muss ich nix ändern) und wenn eine Version wirklich fertig ist, mach ich den 32bit. Hätte nicht gedacht, dass das doch so einfach ist.
Ich kann mir keine Signatur leisten :-(

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Crosscompiling von win64 auf win32

Beitrag von MitjaStachowiak »

__________________________

Ich muss dieses Tema noch einmal anschneiden... Ich möchte in Zukunft wichtige Projekte auch für 32- und 64bit anbieten. Ich habe also die neuste Version von Lazarus (1.04) für 32 und 64 bit heruntergeladen und (32 zuerst) in den gleichen Ordner installiert. Aber alle Programme, die ich für 32bit kompiliere stürzen sofort ab, bevor der Debugger starten kann. Es kommt dieser Windows-Dialog "Projekt1.exe funktioniert nicht mehr".

Ist es nicht richtig, für 32bit unter Projekt --> Projekteinstellungen --> Codegenerierung das Zielbetriebssystem auf Win32 und Ziel-CPU auf i386 zu stellen?
Ich habe auch schon mit dem Kompilerpfad experimentiert - ich schaffe es einfach nicht.

soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Re: Crosscompiling von win64 auf win32

Beitrag von soerensen3 »

als alternative habe ich codetyphon installiert, da kann man mehrere lazaren gleichzeitig installieren.
man kann dann einfach fpc mehrmals für die anderen platformen kompilieren.
Ich hab aber noch nicht so viel damit rumprobiert aber es hat damit funktioniert.

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Crosscompiling von win64 auf win32

Beitrag von MitjaStachowiak »

Hm, das Setup davon braucht ja ewig...

So, fertig. Ich erhalte aber immer folgende Fehlermeldungen:

Code: Alles auswählen

PPU Loading C:\codetyphon\lazarus\lcl\units\i386-win32\win32\interfaces.ppu
PPU Invalid Version 134
project1.lpr(9,3) Fatal: Can not find Interfaces used by Project1, ppu=..\lazarus\lcl\units\i386-win32\win32\interfaces.ppu, package LCL
 
Kommt mir irgendwie bekannt vor, aber hier bekomme ich es nicht gelöst...

x64-Programme kann ich kompilieren, aber da meckert der Debugger "Not in executable format". Also irgendwas mache ich falsch...
Zuletzt geändert von MitjaStachowiak am Do 13. Dez 2012, 11:13, insgesamt 1-mal geändert.

soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Re: Crosscompiling von win64 auf win32

Beitrag von soerensen3 »

und das kompilieren erst ... ;)

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Crosscompiling von win64 auf win32

Beitrag von MitjaStachowiak »

Ja... Muss man, nachdem man die setup.bat ausgeführt und Remove and Build ALL ausgewählt hat (und gewartet hat :mrgreen: ) noch irgendwas machen?

Ich habe unter Projekteinstellungen wieder Win32 und i386 bzw. Win64 und x86_64 eingestellt - das erste (32) geht nicht (Fehlermeldung siehe oben), das zweite (64) lässt sich nicht debuggen...

soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Re: Crosscompiling von win64 auf win32

Beitrag von soerensen3 »

wo jetzt? also so habe ich das bisher immer gemacht.

1. 1x fpc für win32 und 1x fpc für win64 kompilieren
2. 1x lazarus für win32 und 1x für win64 kompilieren

Das Ganze über die Benutzeroberfläche von CodeTyphon
Da gibts noch die Unterscheidung BigIDE und SmallIDE, bei der BigIDE sind alle Packages mit drin und small ist sehr minimalistisch, glaub sogar ohne synedit. Das kann man aber auch anpassen.

soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Re: Crosscompiling von win64 auf win32

Beitrag von soerensen3 »

achso und ich starte dann immer die ide für die ich kompilieren will,

da gibts bestimmt bessere lösungen aber es funktioniert und insofern ist mir das egal.

Wass fürn remove? Weiß das leider jetzt auch nicht mehr auswendig, habe das nur auf der Arbeit und bei meiner freundin auf dem Computer installiert ;)
Ich glaube ich habe nur Install bei dem ersten batch gemacht und dann hat der noch die setup.bat ausgeführt und da musste man auch irgendwas mit install machen, und dann habe ich codetyphon gestartet..

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Crosscompiling von win64 auf win32

Beitrag von MitjaStachowiak »

Ok, läuft.

Ich habe bei mir erstmal alles runtergeschmissen (Lazarus deinstalliert, Einstellungen gelöscht, aus PATH genommen, CodeTyphon gelöscht).
Dann CodeTyphon wieder draufkopiert und in der start.bat das erste (CodeTyphon starten) ausgewählt. In CodeTyphon dann FPC 32, Laz 32 BIG, FPC 64 und Laz 64 BIG kompiliert und dann ging's.

Vielen Dank für den Tipp :)

Antworten