Cross Compiling

Für Installationen unter Windows
Antworten
micha.schumann
Beiträge: 5
Registriert: Fr 19. Feb 2010, 10:17
OS, Lazarus, FPC: Win7(L 0.9.29 FPC 2.4.1) Ubuntu(L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit

Cross Compiling

Beitrag von micha.schumann »

Hallo,

ich bin seit der ersten Stunde mit Turbo-Pascal und Delphi unterwegs und bei D7 stehen geblieben, da die Monsterpakete 20xx und die Borland oder was auch immer .NET Politik grausig sind. Nun habe ich FPC und Lazarus entdeckt und bin von der Portabilität der LCL begeistert und davon, dass es ein offenes Projekt ist, wo Firmenpolitik nichts zu melden hat. Ich möchte gerne einge meiner Projekte auf diese Plattform überführen. Unter Delphi 7 hatte ich mit CrossKylix die Möglichkeit, in der Windows-IDE ein Linux Executable zu kompilieren, sogar mit meinen batch-Build-Scripten, mit denen ich die Releases erstelle. Das würde ich gerne mit Lazarus auch machen, da der Wechsel in VMWare für Linux und dort übersetzen doch immer wieder Zusatzschritte sind, die beim Entwickeln immer wieder nötig sind, um zu sehen, ob man es so auch unter Linux machen kann.

Leider bekomme ich es nicht hin, der Windows IDE das komplette Übersetzen von Linux Executables (GTK2) beizubringen. Nicht einmal das Kompilieren 32 Bin Windows und 64 Bit Windows aus einer IDE habe ich geschafft. Von der Struktur FPC/Lazarus her sollte es eigentlich gehen und ich habe auch Hinweise gefunden im Crosscompiling WIKI (binutils von 2003???), aber damit konnte ich keine GTK2 Anwendungen linken. Der Compiler hat klaglos für die Plattform LINUX übersetzt, der Linker hat die mühseelig zusammengesuchten und in das fcp/bin Verzeichnis kopierten so's gefunden aber dann etliche Fehler über fehlende Referenzen gebracht, obwohl auf dem Debian-System, von dem die SOs und Linux-Units stammen, Lazarus perfekt läuft. Linux zu Windows scheint kein großes Thema zu sein, da das Crosscompiling WIKI da einiges parat hält. In der anderen Richtung ist es sehr dünn.

Nun meine Frage an die Profis hier: Ich bin bereit, eine Menge Arbeit in das Erstellen/Konfigurieren einer Windows IDE zu stecken, die 32/64 Bit Windows (native, nicht qt oder GTK) und 32/64 Bit Linux (GTK2) übersetzen kann und ich bin sicher, dass das geht. Gerne dokumentiere ich es dann sauber für das WIKI aber mir fehlt einfach noch einiges Schlüssel-Know-How für PPC und Lazarus. Wenn wir alles zusammenwerfen kriege ich es bestimmt hin und es ist sicher für viele frustrierte Delphi Anwender interessant, die sich immer Cross-Platform für Windows und Linux gewünscht haben.

Oder hat es jemand schon gemacht? ;-))

Micha

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 Compiling

Beitrag von mschnell »

Lazarus kann im Prinzip "cross-compilern" (Anderes OS, anderer Prozessor)

Soweit ich weiß kann also die Lazarus IDE in Windows executables für Linux erstellen. Hab' ich aber noch nicht ausprobiert.

-Michael

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:

Re: Cross Compiling

Beitrag von monta »

Hast du dir mal folgendes Dokument angeschaut:

http://www.stack.nl/~marcov/buildfaq.pdf

Da gibt es auch einen recht ausführlichen Abschnitt für Cross von Win zu Linux.
Johannes

edewolf78
Beiträge: 12
Registriert: Mo 23. Nov 2009, 18:42
OS, Lazarus, FPC: Win (L 0.9.29 FPC 2.4.0)
CPU-Target: x32/x64
Wohnort: Ludwigsburg

Re: Cross Compiling

Beitrag von edewolf78 »

Hi,
zu Linux kann ich leider nichts sagen, bei Windows ist es so : unter Win64 kannst Du für 32 und 64 Bit kompilieren, unter Win32 nur für 32 Bit.
Ich habe es so eingerichtet (Vista 64 und Win7 64):
1. Zuerst Lazarus für Win32 installiert
2. dann die Version für Win64 einfach drüber installiert

dann stelle ich nur noch Ziel und Platform auf Win64/Win32 und die Pfade für Make und Compiler für die entsprechende Platform. Bei mir tut es so, ob es eine einfachere Möglichkeit gibt - keine Ahnung. Allerdings habe ich ein Problem mit dem Debugger, unter Win64 läuft er einfach nicht !?

Gruss Edwin

Lazarus Win32/64 V 0.9.29, FPC: 2.4.0

micha.schumann
Beiträge: 5
Registriert: Fr 19. Feb 2010, 10:17
OS, Lazarus, FPC: Win7(L 0.9.29 FPC 2.4.1) Ubuntu(L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit

Re: Cross Compiling

Beitrag von micha.schumann »

Hallo,

ich habe mir die Sachen durchgelesen und komme mit diesen Schritten fast durch. Nur beim Linken gibt es Ärger. Hier meine Vorgehensweise soweit:

System: Lazarus 0.9.29 mit FPC 2.4.0 auf Windows 7, 64 Bit
Basisinformationen für diese Anleitung aus http://www.stack.nl/~marcov/buildfaq.pdf und http://www.stack.nl/~marcov/crossnotes.txt


• Ausgangsbasis lazarus 32 Bit-installation in c:\lazarus
• FPC 2.4.0 Quellcode eingespielt nach c:\lazarus\fpc\2.4.0\source\, vorhandene Dateien überspielt
• Lazarus Soruce 0.9.29.23610 eingespielt nach c:\lazarus, vorhandene Dateien überspielt
• Pfad in der Systemsteuerung (System/Erweiterte Einstellungen) ergänzt um c:\lazarus\fpc\2.4.0\bin\i386-win32\
• Binutils von ftp://freepascal.stack.nl/pub/fpc/contr ... -linux.zip heruntergeladen und nach c:\lazarus\fpc\2.4.0\bin\i386-win32\ entpackt.
• In c:\lazarus\fpc\2.4.0\source\ ausgeführt:
make clean
make OS_TARGET=linux all
make OS_TARGET=linux install INSTALL_PREFIX=c:\lazarus\fpc\2.4.0
• Von einem Debian etch aus /lib und /usr/lib und /usr/lib/gcc/i486-linux-gnu/4.1.2 diese Dateien nach c:\lazarus\fpc\2.4.0\bin\i386-win32\ kopiert: crtbegin.o, crtbeginS.o, crtbeginT.o, crtend.o, crtendS.o, crti.o, crtn.o, ld-linux.so.2,libatk-1.0.so, libc.so libc.so.6, libcairo.so, libdl.so, libdl.so.2, libfontconfig.so.1, libfreetype.so.6, libgdk-x11-2.0.so, libgdk_pixbuf-2.0.so, libglib-2.0.so, libgmodule-2.0.so, libgobject-2.0.so, libgthread-2.0.so, libgtk-1-2.0.so, libm.so, libm.so.6, libpango-1.0.so, libpangocairo-1.0.so.0, libpng12.so.0, libpthread.so, librt.so.1, libX11.so, libXau.so.6, libXcursor.so.1, libXdmcp.so.6, libXext.so.6, libXfixes.so.3, libXi.so, libXi.so.6, libXinerama.so.1, libXrandr.so.2, libXrender.so.1, libz.so.1
• Lazarus neu kompiliert: LCL, Package-Registrierung und Beispiele mit LCL-Schnittstelle gtk 2 und Zielbetriebssystem linux.

HIER KOMMT DAS PROBLEM BEIM LINKEN:

"LCL" beendet
"Package-Registrierung" beendet
C:\lazarus\fpc\2.4.0\bin\i386-win32\/libgdk_pixbuf-2.0.so: undefined reference to `ceil@GLIBC_2.0'
C:\lazarus\fpc\2.4.0\bin\i386-win32\/libgtk-x11-2.0.so: undefined reference to `tan@GLIBC_2.0'
… einige hundert weitere davon
C:\lazarus\fpc\2.4.0\bin\i386-win32\/libgdk-x11-2.0.so: undefined reference to `XcursorImageCreate'
C:\lazarus\fpc\2.4.0\bin\i386-win32\/libcairo.so: undefined reference to `FcDefaultSubstitute'
C:\lazarus\examples\hello.pp(31,1) Error: Error while linking
C:\lazarus\examples\hello.pp(31,1) Fatal: There were 1 errors compiling module, stopping

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

Re: Cross Compiling

Beitrag von theo »

Warte mal bis User marcov (Marco van de Voort) mal wieder hier auftaucht.
Wenn's der nicht weiss wird's schwierig. ;-)

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 Compiling

Beitrag von mschnell »

theo hat geschrieben:Warte mal bis User marcov (Marco van de Voort) mal wieder hier auftaucht. Wenn's der nicht weiss wird's schwierig. ;-)

Vielleicht im englischen Forum nachfragen ? ( http://lazarus.freepascal.org/index.php?action=forum )

-Michael

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Cross Compiling

Beitrag von Scotty »

Von einem Debian etch aus /lib und /usr/lib ... diese Dateien nach c:\lazarus\fpc... kopiert:
Das wird nicht so einfach gehen. Du versuchst Bibliotheken zu kopieren, ohne deren wechselseitige Referenzen aufzulösen, was im "undefined reference to" resultiert. Es ist eine leichte Übung, VirtualBox für Windows und dort hinein ein Linux zu installieren. Außerdem gibt es viele Live-System...
Wenn du trotzdem Marcov's Anleitung folgen willst, dann würde ich auf Punkt 12 tippen. Es könnte auch zur Eingrenzung des Fehlers helfen, ein einfaches Testprogramm zu bauen (kein GTK, einfaches writeln).

micha.schumann
Beiträge: 5
Registriert: Fr 19. Feb 2010, 10:17
OS, Lazarus, FPC: Win7(L 0.9.29 FPC 2.4.1) Ubuntu(L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit

Re: Cross Compiling

Beitrag von micha.schumann »

Hallo,

danke zusammen. Ich vermute fast, dass das Problem in der seltsamen Referenz auf ...\/libc.so und so weiter liegt, wo ein WIndows und ein Linux Pfadtrenner kombiniert werden. Die zunächst fehlenden SOs habe ich nach Fehlermeldungen des Linkers alle zusammengesucht (hinweis von marcov). Die Libraries sind definitiv da und die zu bindenden Funktionen sind auch dort drin und erst dann kracht es. Zum Linkzeitpunkt dürfte es nicht interessieren, ob die LibC noch eine andere so benötigt, da ja nur statisch an die vom Programm verwendeten Funktionen angekoppelt wird. Ich werde mal in das englische Forum posten!

However, ich habe ja Linux in VMWare und greife auf das Projektverzeichnis zu, es klappt so auch gut immer mal wieder zu testen, ob es unter Linux übersetzt. Ich gehe daher mit mehreren Installationen.

Jedenfalls danke für die unterstützenden Hinweise!

Micha

Antworten