Von Linux 64-Bit für Linux 32-Bit kompilieren

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von Nils »

Moin,

ich will von Linux 64-Bit aus für Linux 32-Bit kompilieren. Hier steht ja alles. Leider scheitert es bei mir am Kompilieren vom FPC selbst. Ich nehme richtig an, dass ich mich im fpc-src-Verzeichnis (bei mir wohl /usr/share/fpcsrc/2.4.2) befinden muss, um make all CPU_TARGET=i386 auszuführen ? Aber dann erhalte ich halt die kühle Fehlermeldung, dass es keine Regel für all gäbe. Ein simples make liefert, dass keine Steuerdatei für make vorliegt. Fehlt mir irgendetwas oder bin ich einfach nur dumm und muss noch etwas anpassen - sei es Befehl oder etwas ganz anderes ?

Und zum Unterforum: Meine Frage hat mit Programmieren selbst ja nichts zu tun, aber ich habe keine Ahnung in welches anderes Unterforum diese Frage gehört. Es gehört hier eigentlich kaum rein, aber die anderen Unterforen finde ich alle noch unpassender.

Gruß,
Nils
Meine Musik: spiker-music.net

Socke
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: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von Socke »

Du hast wohl die Quellen aus einem Paket installiert. In den Debian-Paketen ist nur der reine Quelltext enthalten (wie es bei anderen Distributionen aussieht kann ich dir nicht sagen). Du musst dir also den Quelltext herunterladen (fpcbuild-Archive) und kannst ihn dann selbst übersetzen.

Übrigens: im Verzeichnis /usr/share/fpcsrc/ hast du als normaler Benutzer keine Schreibrechte. Das heißt du musst den FPC zuerst in einem anderen Verzeichnis erstellen und dann dorthin installieren. Oder du erstellst dir eine zweite FPC-Installation in deinem HOME-Verzeichnis.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von carli »

Ich hab mich mal durch Crosscompiling durchgekämpft, es war eine Tortur, aber es ging am Ende.
Hier die Seite, mit der ich gearbeitet hab: http://wiki.freepascal.org/Cross_compiling/de

Im Prinzip brauchst du alle .so's, die FPC/Laz benötigt auch als 32-Bit Version in einem Fake-/-Verzeichnis und einige andere Tricks.

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: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von Scotty »

Lass mal "fpcmake -Tall" laufen.

Code: Alles auswählen

/usr/local/bin/fpcmake: <-pw> [-vqh] [file] [file ...]
Operations:
 -p  Generate Package.fpc
 -w  Write Makefile
 -V  Print fpcmake version and exit
 
Options:
 -T<target>[,target] Support only specified targets. If "-Tall", all targets are
                     supported. If omitted only default target is supported
 -r                  Recursively process target directories from Makefile.fpc
 -v                  Be more verbose
 -q                  Be quiet
 -h                  This help screen

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von Euklid »

Bei Promathika umgehen wir das Problem, indem wir unter ubuntu 64bit in einer VirtualBox ubuntu 32bit mit Lazarus installieren und das Programm für 32bit-Systeme kompilieren. Anschließend lässt sich das Programm zudem unter dem virtuellen 32bit-Sytem testen.

Gruß, Euklid

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Re: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von Nils »

Habe jetzt einfach wie im Wiki alles gemacht erstmal. Im heruntergeladenen fpc-Quellcodeverzeichnis also:

Code: Alles auswählen

make all CPU_TARGET=i386
su -c "make install CPU_TARGET=i386"

Danach habe ich alle Dateien der Endungen .a, .o, .ppu aus dem fpc-Quellcodeunterverzeichnis "packages" nach /usr/lib/fpc/2.4.2/units/i386-linux kopiert. Kompilieren kann ich jetzt. Der Linker schmiert jedoch ab:

Code: Alles auswählen

/usr/bin/ld: skipping incompatible /usr/lib/crti.o when searching for /usr/lib/crti.o
/usr/bin/ld: cannot find /usr/lib/crti.o
Error: Error while linking


Scotty: Deinen Beitrag habe ich leider erst zu spät gesehen. Macht es jetzt überhaupt noch Sinn, was Du gesagt hast ?
Euklid: Nicht übel die Idee eigentlich.
Meine Musik: spiker-music.net

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: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von marcov »

Versuche mal dies im fpc.cfg

Code: Alles auswählen

#ifdef i386
  -Xd
  -Fl/usr/lib32
  -Fl/lib32
#endif

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Re: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von Nils »

Habe ich einfach ganz unten angefügt in der Datei. Leider ohne Wirkung.
Meine Musik: spiker-music.net

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: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von Scotty »

/usr/bin/ld: cannot find /usr/lib/crti.o
Du brauchst die 32bit Versionen der benutzen Bibliotheken (libc-dev, gcc etc.).
Scotty: Deinen Beitrag habe ich leider erst zu spät gesehen. Macht es jetzt überhaupt noch Sinn, was Du gesagt hast ?
Mein Beitrag war auf "Ein simples make liefert, dass keine Steuerdatei für make vorliegt." bezogen.

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Re: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von Nils »

Ich habe jetzt eine chroot-Umgebung für 32-Bit angelegt. Dort sind ein paar Pakete auch installiert, weiß ja nicht was ich so alles brauche. Aber wie sage ich jetzt Lazarus, dass es eben diese Pakete verwenden soll ?
Meine Musik: spiker-music.net

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von carli »

Nils hat geschrieben:Ich habe jetzt eine chroot-Umgebung für 32-Bit angelegt. Dort sind ein paar Pakete auch installiert, weiß ja nicht was ich so alles brauche. Aber wie sage ich jetzt Lazarus, dass es eben diese Pakete verwenden soll ?


Mit der Option "-Fl/pfad/zu/lib/"

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Re: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von Nils »

Ich habe die obigen Zeilen genommen und dann meine chroot-Distribution reingeschrieben.

Code: Alles auswählen

#ifdef i386
  -Xd
  -Fl/var/sid-386-chroot/usr/lib32
  -Fl/var/sid-386-chroot/lib32
#endif

Die Fehlermeldung des Linkers:

Code: Alles auswählen

/usr/bin/ld: skipping incompatible /usr/lib/crti.o when searching for /usr/lib/crti.o
/usr/bin/ld: cannot find /usr/lib/crti.o

Er hat also nicht begriffen, dass ich den Pfad geändert habe. Ist es okay, wenn der "64-Bit Compiler für i386" sich in der 64-Bit-Verzeichnisstruktur (also auch Distribution) befindet und daher die 32-Bit-Bibliotheken in der anderen Distribution liegen ? Denn offensichtlich weiß der Linker nichts von der 32er-Distribution in /var/sid386-chroot. Habe viel geändert in der fpc.cfg aber nie hat sich etwas beim Linker verändert. "Reading options from file /etc/fpc.cfg" liefert fpc -vut und genau diese Datei editiere ich. Ich habe halt via chroot die (hoffentlich) ganzen Libs besorgt und habe vor - ohne FPC via chroot laufen zu lassen (wäre ja auch nicht nötig) - die Pfade via -Fl auf die durch das chroot erzeugten Dateien zu setzen.

Habe es nochmal anders versucht: Die 32er-Distribution wurde um FPC und Lazarus bereichert. Dann habe ich dort mal eben kompiliert. Lazarus via chroot ist etwas merkwürdig, aber naja, vielleicht klappt es ja. Beim Linken kriege ich halt dann Pobleme mit OpenGL:

Code: Alles auswählen

FEHLER [21:49:06] Erzeugen der OpenGL-Zeichenfläche schlug fehl: Couldn't find matching GLX visual @SDL_Init
sagt mein Programm.
Testen kann ich es also nicht. Da das 32-Bit Lazarus via chroot nach GTK1 aussieht, wird das mein Programm auch oder ? Das wäre schlecht.

Die Idee mit der virtuellen Maschine habe ich versucht, der Linker hat sich jedoch leider immer aufgehängt dann.
Meine Musik: spiker-music.net

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: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von Scotty »

Chroot ist ein ziemlich umständlicher (und IMHO komplizierter) Weg, wenn du nur die 32bit libs brauchst (Dein Fehler sieht so aus, als würde noch die Standardumgebung laufen oder als hättest du die *dev Versionen nicht installiert). Man kann problemlos 32bit Programme und Bibliotheken auf einem 64bit System installieren. Dadurch muss dann beim kompilieren nicht immer in ein anderes OS gechrootet werden.

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Re: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von Nils »

Naja also wenn ich das richtig gelesen habe kriege ich die Bibliotheken OHNE chroot nur umständlich und halte sie auch nur umständlich aktuell. Ich habe nicht ohne Grund Debian. Wie genau würdest Du denn vorgehen ? Der Fehler da sieht so aus als würde der Grafikkartentreiber nicht gestartet werden können übrigens, da der für 64-Bit ist.
Meine Musik: spiker-music.net

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: Von Linux 64-Bit für Linux 32-Bit kompilieren

Beitrag von Scotty »

Keine Ahnung, wie Debian das macht, aber unter Ubuntu sind alle 32bit Bibliotheken in Synaptics drin. Das ist auch unter openSuSE so: installiert man zum Beispiel Skype, kommt der ganze 32bit Schrott :oops: hinterher.
Ich glaube auch, dass Euklid eine Virtualisierung meinte. Einfach Virtualbox, vmware, xen o.ä. installieren und in eine VB ein neues OS installieren, das dann auch auf die Datenpartition zugreifen kann. Ich benutze Virtualbox und habe dort ein XP und ein W7 drin, die beide auf den Quellcode zugreifen können. Für 32bit Linux würde ich aber immer nur einen 32bit Kompiler erstellen.
Chroot ist IMHO dazu da, in ein parallel installiertes System zu wechseln, zum Beispiel wird von CD gebootet und ins HDD System gechrootet.

Antworten