Cross-Compiling ist was feines.
Wenn es denn funktioniert.
Für Gentoo gibt es ein Tool um eine Toolchain für ein fremdes System zu bauen:
crossdev.
Damit kann man auf einem 64bit-Linux Binaries für 32bit-Systeme erstellen. Das ist besonders für verteiltes Compilen brauchbar. Wenn man unterm Schreibtisch eine dicke Kiste mit einem aktuellen 64bit-fähigen Prozessor stehen hat, spart es viel Zeit, wenn der beim Compilen für z.B. das Notebook helfen würde. Das ermöglicht
DistCC [1].
Da seit einiger Zeit auf meinem Notebook immer wieder Pakete beim verteilten Compilen mit eigenartigen Fehlern abbrechen, wollte ich mal meine Toolchain updaten: Also die alten Pakete deinstalliert, und
crossdev --target i686-pc-linux-gnu
aufgerufen. Das schlug aber fehl mit
Calculating dependencies
!!! All ebuilds that could satisfy "cross-i686-pc-linux-gnu/gcc" have been masked.
!!! One of the following masked packages is required to complete your request:
- cross-i686-pc-linux-gnu/gcc-20080430 (masked by: missing keyword)
For more information, see MASKED PACKAGES section in the emerge man page or
refer to the Gentoo Handbook.
obwohl crossdev die passenden Einträge in
/etc/portage/package.keywords/cross-i686-pc-linux-gnu erstellt hatte.
Nach viel Ärgern, Bugtracker absuchen und Googlen fand ich dann einen Foreneintrag [2], der ähnliche Probleme beschreibt.
crossdev benötigt ein Overlay, um darin Symlinks auf vorhandene Ebuilds erstellen zu können. Das erste Overlay in meiner
/etc/make.conf kam aber vom Layman. Und das hat sich irgendwie nicht vertragen. Die Symlinks waren im Sunrise-Overlay gelandet. Nachdem ich das Layman-Overlay vorübergehend aus meiner make.conf gestrichen hatte, funktionierte auch das Crossdev wieder.
Quellen:
[1]
http://www.gentoo.org/doc/en/distcc.xml
[2]
http://forums.gentoo.org/viewtopic-t-511283.html