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

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 endlich mal wieder etwas Zeit um das Problem zu lösen und arbeite schon wieder seit Tagen dran. Ich befinde mich im 64-Bit Lazarus und versuche den Crosscompiler für 32-Bit zum Laufen zu kriegen. Ich habe einfach mal die crti.o in /lib umbenannt zu crti.o_ und dann aus /lib32 die crti.o nach /lib kopiert. Der Linker kam dann mit der Datei klar. Gab natürlich noch andere Fehler, die dürften aber alle lösbar sein. Der Punkt ist nämlich an der Fehlermeldung zu sehen: "/usr/bin/ld: skipping incompatible /usr/lib/crti.o when searching for /usr/lib/crti.o" /usr/lib steht - das ist der Fehler. Da müsste ein /usr/lib32 stehen und das würde da niemals als Fehlermeldung stehen, da dann die in /lib32 gefundene crti.o kompatibel wäre. Die Frage ist eben, wie ich dem Linker nun klar mache, dass er den anderen lib-Ordner nimmt. Im IRC sagte man mir, es soll über Projekteinstellungen -> Compilereinstellungen -> Pfade -> Bibliotheken gehen. Doch mit einem Eintrag /lib32 tut sich da nichts. Vermutlich weil /lib32 dann sekundär und /lib weiterhin primär ist. Kann mir aber auch allgemein nicht vorstellen, dass man dem Linker so etwas über diese Angabe in den Projekteinstellungen klar machen kann. Der Parameter -Xr für den Compiler wäre EVENTUELL eine Lösung, da mit dem vermieden wird, dass der Compiler falsche Lib-Pfade an den Linker gibt - in wie weit das dann funktioniert ist natürlich eine andere Frage. Nur wo gibt man den Parameter ein ? Was das angeht komme ich mit der GUI von Lazarus einfach nicht klar. Müsste man eine Shellscript-Datei editieren wäre das einfacher, denn da wüsste man wenigstens, wo man welchen Parameter hinschreibt.

Habe es gelöst. Weiter oben hier im Thema stand der folgende Code, bloß dass marcov "cpu" vor i386 vergessen hatte, nun läuft es:

Code: Alles auswählen

#ifdef cpui386
  -Xd
  -Fl/var/sid-386-chroot/usr/lib
  -Fl/var/sid-386-chroot/lib
#endif

Wie man sieht, habe ich jetzt das chroot dazu verwendet, die Dateien dort heraus zu nehmen. Dann muss man nicht erst unnötig rumkopieren. Außerdem finde ich es recht komfortabel via Paketverwaltung dann alle Updates etc. auch für die 32-Bit-Dateien so einfach zu installieren, während man es sonst unter Debian recht umständlich kopieren und laden müsste.

Vielen Dank für Eure Hilfe.
Meine Musik: spiker-music.net

Antworten