CrossCompile unter Linux 64bit für i386-Linux - Compile FPC
-
- Beiträge: 34
- Registriert: Fr 8. Jul 2011, 10:45
- OS, Lazarus, FPC: Win7, Ubuntu 64 und 32bit Lazarus (immer aktuellstes Release) FPC 2.6.4
- CPU-Target: amd_64 und i386
- Kontaktdaten:
CrossCompile unter Linux 64bit für i386-Linux - Compile FPC
Hallo,
ich versuche gerade mien Lazarus Programm unter Linux zum Laufen zu bringen und habe folgendes Problem.
Mein System ist ein aktuelles debian 64bit system
Linux version 2.6.32-5-amd64 (Debian 2.6.32-48squeeze1) (dannf@debian.org) (gcc version 4.3.5 (Debian 4.3.5-4) ) #1 SMP Mon Feb 25 00:26:11 UTC 2013
Installiert habe ich:
fpc_2.6.2-0_amd64.deb
fpc-src_2.6.2-0_amd64.deb
lazarus_1.0.8-0_amd64.deb
Soweit so gut, mein Programm compiliert und ich kann es auf meinem System ausführen.
Aber nicht auf einem 32 Bit Debian system.
Also folgte ich der Anleitung unter http://wiki.freepascal.org/Cross_compiling/de unter "Zu Linux"
Die beiden Dateien i386-linux-ld und i386-linux-as waren nicht vorhanden, ich habe sie nach Anleitung erstellt.
Mein Problem kommt jetzt:
bash $ make all CPU_TARGET=i386
Liefert einen Fehler:
...
make -C fpdoc all
make[3]: Entering directory `/usr/share/fpcsrc/2.6.2/utils/fpdoc'
/usr/share/fpcsrc/2.6.2/compiler/ppcross386 -Pi386 -XPi386-linux- -Xr -Ur -Xs -O2 -n -S2h -Fu/usr/share/fpcsrc/2.6.2/rtl/units/i386-linux -Fu/usr/share/fpcsrc/2.6.2/packages/fcl-base/units/i386-linux -Fu/usr/share/fpcsrc/2.6.2/packages/iconvenc/units/i386-linux -Fu/usr/share/fpcsrc/2.6.2/packages/fcl-xml/units/i386-linux -Fu/usr/share/fpcsrc/2.6.2/packages/fcl-passrc/units/i386-linux -Fu/usr/share/fpcsrc/2.6.2/packages/chm/units/i386-linux -FE. -FUunits/i386-linux -Flinclude -Fl/etc/ld.so.conf.d/*.conf -di386 -dRELEASE fpdoc.pp
ld: warning: ./link.res contains output sections; did you forget -T?
ld: skipping incompatible /usr/lib/crti.o when searching for /usr/lib/crti.o
ld: skipping incompatible /usr/lib/crti.o when searching for /usr/lib/crti.o
ld: cannot find /usr/lib/crti.o
fpdoc.pp(382,1) Error: Error while linking
fpdoc.pp(382,1) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
make[3]: *** [fpdoc] Fehler 1
make[3]: Leaving directory `/usr/share/fpcsrc/2.6.2/utils/fpdoc'
make[2]: *** [fpdoc_all] Fehler 2
make[2]: Leaving directory `/usr/share/fpcsrc/2.6.2/utils'
make[1]: *** [utils_all] Fehler 2
make[1]: Leaving directory `/usr/share/fpcsrc/2.6.2'
make: *** [build-stamp.i386-linux] Fehler 2
Nach dem Fehler gesucht finde ich z.B.
http://bugs.freepascal.org/view.php?id=22971
Ich suche nun schon das ganze Wochenende nach einer Lösung und finde nichts.
Kann mir jemand helfen und mir sagen was ich wie installieren muss damit es mit dem crosscompile klappt.
Das Rezept auf der Lazarus Wikiseite scheint ja nicht zu funktionieren.
Ach ja, ich bin Linux Anfänger.
Grüße
Rob
ich versuche gerade mien Lazarus Programm unter Linux zum Laufen zu bringen und habe folgendes Problem.
Mein System ist ein aktuelles debian 64bit system
Linux version 2.6.32-5-amd64 (Debian 2.6.32-48squeeze1) (dannf@debian.org) (gcc version 4.3.5 (Debian 4.3.5-4) ) #1 SMP Mon Feb 25 00:26:11 UTC 2013
Installiert habe ich:
fpc_2.6.2-0_amd64.deb
fpc-src_2.6.2-0_amd64.deb
lazarus_1.0.8-0_amd64.deb
Soweit so gut, mein Programm compiliert und ich kann es auf meinem System ausführen.
Aber nicht auf einem 32 Bit Debian system.
Also folgte ich der Anleitung unter http://wiki.freepascal.org/Cross_compiling/de unter "Zu Linux"
Die beiden Dateien i386-linux-ld und i386-linux-as waren nicht vorhanden, ich habe sie nach Anleitung erstellt.
Mein Problem kommt jetzt:
bash $ make all CPU_TARGET=i386
Liefert einen Fehler:
...
make -C fpdoc all
make[3]: Entering directory `/usr/share/fpcsrc/2.6.2/utils/fpdoc'
/usr/share/fpcsrc/2.6.2/compiler/ppcross386 -Pi386 -XPi386-linux- -Xr -Ur -Xs -O2 -n -S2h -Fu/usr/share/fpcsrc/2.6.2/rtl/units/i386-linux -Fu/usr/share/fpcsrc/2.6.2/packages/fcl-base/units/i386-linux -Fu/usr/share/fpcsrc/2.6.2/packages/iconvenc/units/i386-linux -Fu/usr/share/fpcsrc/2.6.2/packages/fcl-xml/units/i386-linux -Fu/usr/share/fpcsrc/2.6.2/packages/fcl-passrc/units/i386-linux -Fu/usr/share/fpcsrc/2.6.2/packages/chm/units/i386-linux -FE. -FUunits/i386-linux -Flinclude -Fl/etc/ld.so.conf.d/*.conf -di386 -dRELEASE fpdoc.pp
ld: warning: ./link.res contains output sections; did you forget -T?
ld: skipping incompatible /usr/lib/crti.o when searching for /usr/lib/crti.o
ld: skipping incompatible /usr/lib/crti.o when searching for /usr/lib/crti.o
ld: cannot find /usr/lib/crti.o
fpdoc.pp(382,1) Error: Error while linking
fpdoc.pp(382,1) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
make[3]: *** [fpdoc] Fehler 1
make[3]: Leaving directory `/usr/share/fpcsrc/2.6.2/utils/fpdoc'
make[2]: *** [fpdoc_all] Fehler 2
make[2]: Leaving directory `/usr/share/fpcsrc/2.6.2/utils'
make[1]: *** [utils_all] Fehler 2
make[1]: Leaving directory `/usr/share/fpcsrc/2.6.2'
make: *** [build-stamp.i386-linux] Fehler 2
Nach dem Fehler gesucht finde ich z.B.
http://bugs.freepascal.org/view.php?id=22971
Ich suche nun schon das ganze Wochenende nach einer Lösung und finde nichts.
Kann mir jemand helfen und mir sagen was ich wie installieren muss damit es mit dem crosscompile klappt.
Das Rezept auf der Lazarus Wikiseite scheint ja nicht zu funktionieren.
Ach ja, ich bin Linux Anfänger.
Grüße
Rob
-
- Lazarusforum e. V.
- Beiträge: 3158
- 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: CrossCompile unter Linux 64bit für i386-Linux - Compile
Rob hat geschrieben:ld: skipping incompatible /usr/lib/crti.o when searching for /usr/lib/crti.o
ld: skipping incompatible /usr/lib/crti.o when searching for /usr/lib/crti.o
ld: cannot find /usr/lib/crti.o
Das könnte darauf hindeuten, dass die Bibliothek crti nur für x68_64, aber nicht für x86 installiert hast. Insbesondere brauchst du die Entwicklungs-Pakete für die Zielplattform.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 34
- Registriert: Fr 8. Jul 2011, 10:45
- OS, Lazarus, FPC: Win7, Ubuntu 64 und 32bit Lazarus (immer aktuellstes Release) FPC 2.6.4
- CPU-Target: amd_64 und i386
- Kontaktdaten:
Re: CrossCompile unter Linux 64bit für i386-Linux - Compile
Socke hat geschrieben:Rob hat geschrieben:ld: skipping incompatible /usr/lib/crti.o when searching for /usr/lib/crti.o
ld: skipping incompatible /usr/lib/crti.o when searching for /usr/lib/crti.o
ld: cannot find /usr/lib/crti.o
Das könnte darauf hindeuten, dass die Bibliothek crti nur für x68_64, aber nicht für x86 installiert hast. Insbesondere brauchst du die Entwicklungs-Pakete für die Zielplattform.
Hallo socke,
unter /lib32 ist die crti.o (und andere) vorhanden.
Das mit den Entwicklungspaketen hab ich schon mal gelesen. WELCHE muss ich denn installieren? Das steht leider nirgendwo.
Ich dachte ich hätte alles installiert und auch die Entwicklungsumgebungen, nachdem ich gesehen habe das lib32 vorhanden ist.
Die FPC Entwicklungsumgebung wird ja damit erst erzeugt, oder liege ich da falsch?
Grüße
Rob
-
- 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: CrossCompile unter Linux 64bit für i386-Linux - Compile
Das müsste für Debian das Paket libc6-dev-i386 sein.
-
- Lazarusforum e. V.
- Beiträge: 3158
- 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: CrossCompile unter Linux 64bit für i386-Linux - Compile
Rob hat geschrieben:Das mit den Entwicklungspaketen hab ich schon mal gelesen. WELCHE muss ich denn installieren? Das steht leider nirgendwo.
Unter Debian haben die Entwicklungspakete in der Regel ein -dev im Namen (wie Scotty schon schrieb). Wie das genau heißt, hängt von der Bibliothek ab.
Rob hat geschrieben:unter /lib32 ist die crti.o (und andere) vorhanden.
[...]
Ich dachte ich hätte alles installiert und auch die Entwicklungsumgebungen, nachdem ich gesehen habe das lib32 vorhanden ist.
Die FPC Entwicklungsumgebung wird ja damit erst erzeugt, oder liege ich da falsch?
Dann könnte es sein, dass der Free Pascal Compiler von falschen Dateipfaden ausgeht. Schau mal unter /etc/fpc.cfg nach, was da eingetragen ist.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 34
- Registriert: Fr 8. Jul 2011, 10:45
- OS, Lazarus, FPC: Win7, Ubuntu 64 und 32bit Lazarus (immer aktuellstes Release) FPC 2.6.4
- CPU-Target: amd_64 und i386
- Kontaktdaten:
Re: CrossCompile unter Linux 64bit für i386-Linux - Compile
Hi Socke,
ich habe in der fpc.cfg was eingetragen, bin aber sehr skeptisch ob das, was ich gemacht habe stimmt.
Die fpc.cfg erschliesst sich mir nicht wirklich.
ich habe
#ifdef x86_64
-Fl/usr/lib
#else
-Xd
-Fl/usr/lib32
#endif
eingefügt. Bin aber nicht sicher ob ich das an der richtigen Stelle gemacht habe, da es keinen Unterschied macht ob das in der fpc.cfg drin ist oder nicht.
Ich habe die fpc.cfg leider nicht dabei, kann sie aber heute abend mal posten, dann kannst du vielleicht mal drüberschauen.
Ich habe bisher Lazarus unter WinXP verwendet und es funktioniert auch ganz gut,
nur jetzt unter Debian Linux hab ich so meine Probleme, da ich kaum noch Linux-Kenntnisse habe.
Der Port von XP nach Linux hat auch erstaunlich reibungslos geklappt. Nur der Cross-Compile jetzt treibt mich schier in den Wahnsinn.
Grüße
Robert
Socke hat geschrieben:Dann könnte es sein, dass der Free Pascal Compiler von falschen Dateipfaden ausgeht. Schau mal unter /etc/fpc.cfg nach, was da eingetragen ist.
ich habe in der fpc.cfg was eingetragen, bin aber sehr skeptisch ob das, was ich gemacht habe stimmt.
Die fpc.cfg erschliesst sich mir nicht wirklich.
ich habe
#ifdef x86_64
-Fl/usr/lib
#else
-Xd
-Fl/usr/lib32
#endif
eingefügt. Bin aber nicht sicher ob ich das an der richtigen Stelle gemacht habe, da es keinen Unterschied macht ob das in der fpc.cfg drin ist oder nicht.
Ich habe die fpc.cfg leider nicht dabei, kann sie aber heute abend mal posten, dann kannst du vielleicht mal drüberschauen.
Ich habe bisher Lazarus unter WinXP verwendet und es funktioniert auch ganz gut,
nur jetzt unter Debian Linux hab ich so meine Probleme, da ich kaum noch Linux-Kenntnisse habe.
Der Port von XP nach Linux hat auch erstaunlich reibungslos geklappt. Nur der Cross-Compile jetzt treibt mich schier in den Wahnsinn.
Grüße
Robert
-
- Lazarusforum e. V.
- Beiträge: 3158
- 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: CrossCompile unter Linux 64bit für i386-Linux - Compile
Rob hat geschrieben:#ifdef x86_64
-Fl/usr/lib
#else
-Xd
-Fl/usr/lib32
#endif
eingefügt. Bin aber nicht sicher ob ich das an der richtigen Stelle gemacht habe, da es keinen Unterschied macht ob das in der fpc.cfg drin ist oder nicht.
Das sieht so in Ordnung aus. Bist du sicher, dass das überhaupt gar keinen Unterschied macht? Falls wirklich die Fehlermeldung und der angegebenen Pfad identisch ist, solltest du mal alle Meldungen des Compilers aktivieren: Projekteinstellungen -> Compilereinstellungen -> Ausführlichkeit -> Alles anzeigen (-va).
Rob hat geschrieben:Ich habe bisher Lazarus unter WinXP verwendet und es funktioniert auch ganz gut,
nur jetzt unter Debian Linux hab ich so meine Probleme, da ich kaum noch Linux-Kenntnisse habe.
Der Port von XP nach Linux hat auch erstaunlich reibungslos geklappt. Nur der Cross-Compile jetzt treibt mich schier in den Wahnsinn.
Das stimmt. Cross-Compiling unter Linux macht man nur, wenn man keine andere Lösung hat, zum Beispiel wenn der Compiler auf der Zielplattform nicht läuft (Microchips) oder zu langsam wäre (eingebette Systeme).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 34
- Registriert: Fr 8. Jul 2011, 10:45
- OS, Lazarus, FPC: Win7, Ubuntu 64 und 32bit Lazarus (immer aktuellstes Release) FPC 2.6.4
- CPU-Target: amd_64 und i386
- Kontaktdaten:
Re: CrossCompile unter Linux 64bit für i386-Linux - Compile
Socke hat geschrieben:Rob hat geschrieben:#ifdef x86_64
-Fl/usr/lib
#else
-Xd
-Fl/usr/lib32
#endif
eingefügt. Bin aber nicht sicher ob ich das an der richtigen Stelle gemacht habe, da es keinen Unterschied macht ob das in der fpc.cfg drin ist oder nicht.
Das sieht so in Ordnung aus. Bist du sicher, dass das überhaupt gar keinen Unterschied macht? Falls wirklich die Fehlermeldung und der angegebenen Pfad identisch ist, solltest du mal alle Meldungen des Compilers aktivieren: Projekteinstellungen -> Compilereinstellungen -> Ausführlichkeit -> Alles anzeigen (-va).
So hier nun beginnen schon meine Verständnisschwierigkeiten.
Projekteinstellungen -> Compilereinstellungen -> Ausführlichkeit -> Alles anzeigen (-va)
Ich bin ja noch gar nicht in der Lazarusoberfläche sondern beim make der Umgebung.
im Verzeichnis: /usr/share/fpcsrc/2.6.2
make all CPU_TARGET=i386
Da ist kein Lazarus Projekt beteiligt. Wenn, dann muss ich da doch irgendwo was im Makefile einstellen?
Ich habe bezüglich des Eintrags in der fpc.cfg mehrere versionen ergoogeln können. Keine hat auch nur irgendetwas bewirkt.
Ich habe nur die fpc.cfg im /etc Verzeichnis, die .fpc.cfg im Homeverzeichnis des Benutzers habe ich gelöscht.
Ich hoffe es ist nur noch die /etc/fpc.cfg übrig und wird auch benutzt.
Grüße
rob
-
- Lazarusforum e. V.
- Beiträge: 3158
- 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: CrossCompile unter Linux 64bit für i386-Linux - Compile
Rob hat geschrieben:So hier nun beginnen schon meine Verständnisschwierigkeiten.
Projekteinstellungen -> Compilereinstellungen -> Ausführlichkeit -> Alles anzeigen (-va)
Ich bin ja noch gar nicht in der Lazarusoberfläche sondern beim make der Umgebung.
im Verzeichnis: /usr/share/fpcsrc/2.6.2
make all CPU_TARGET=i386
Da ist kein Lazarus Projekt beteiligt. Wenn, dann muss ich da doch irgendwo was im Makefile einstellen?
Da lag ein Missverständnis meinerseits vor. Wenn du dir den Cross-Compiler erstellst, kannst du das Parameter für den FPC ebenfalls angeben:
Code: Alles auswählen
make all CPU_TARGET=i386 OPT="-Fl/usr/lib32/oder/so/ähnlich/"
Gegebenenfalls solltest du dir die FPC-Quellen von der offiziellen FPC-Webseite holen. Ich hatte schonmal Probleme mit den Makefiles, die in den Debian-Paketen stecken.
Edit: Die beste Dokumentation zum Thema sind die Build-FAQ
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein