# [solved] cross-compiling, crossdev& X-Server = geht nicht!

## Gucky_der_Mausbiber

Hallo,

ich wollte mal nachfragen ob sich hier irgendwer mit dem Thema "cross-compiling" (crossdev) unter gentoo auskennt.

Ich arbeite derzeit an einem kleinen arm-Gerät auf welchem ich diverse Programme installieren möchte. Dabei haben sich leider immer wieder 2 Probleme gezeigt. 

Zum einen die Geschwindigkeit, Pakete wie gtk+ oder mozilla-firefox brauchen auf einem 400MHz arm-Prozessor schonmal 20 Stunden oder mehr bis sie komplett compiliert & installiert sind.

Außerdem ist der Speicher auch ein Problem, sowohl der geringe Hauptspeicher (64MB), wie auch der freie Platz auf der 2GB-SD-Card werden immer wieder zum Flaschenhals. Z.Bsp. reichen gtk+ die 64MB Arbeitsspeicher nicht aus, so das ich mit swap-Partitionen arbeiten muss. Oder mozilla-firefox was mal während der Installation ein paar hundert MB an Festplattenplatz braucht.

Wie man also sieht macht das installieren von Software auf dem arm-Gerät nicht wirklich Spaß und auch nicht wirklich Sinn (wenn man 20 Stunden zuschaut wie mozilla-firefox compiliert wird und er dann mit einem Fehler abbricht).

Naja, bin ja nicht ganz auf den Kopf gefallen und habe nach Lösungen gesucht. Eine wäre ein Image des Systems über qemu laufen zu lassen, aber irgendwie sagt mir das nicht so zu.

Die andere Lösung ist die des "cross-compilings", und wenn ich mit dazu richtig informiert habe ist das genau das was ich brauche. Die Software wird auf meinem Desktop-Rechner compiliert und ich kopiere später nur die "fertige" Software auf meine SD-Card.

Gesagt, getan, gentoo hat zu dem Thema ja eine eigene HowTo-Seite eingerichtet.

An diese Anleitung habe ich mich auch gehalten und erstmal per 

```
crossdev -t armv4tl-softfloat-linux-gnueabi
```

 die entsprechende Toolchain bauen lassen. Danach habe ich dann unter "/usr/armv4tl-softfloat-linux-gnueabi" die entsprechenden Ordner gesetzt, die "Fake"-make.conf und auch die 2 Skripte (xmerge & xkmage) angelegt.

Ich bin also Schritt für Schritt nach der Anleitung vorgegangen.

Mein erster Test des cross-compiler bestand in einem 

```
xmerge -av ntp
```

Das hat auch ohne Probleme geklappt, die 4 Pakete wurden korrekt für die arm-Plattform übersetzt und in meinem SYSROOT installiert. Wunderbar.

Von dort kann ich dann die einzelnen Pakete per 

```
ROOT="$SYSROOT" qpkg -P "${SYSROOT}/var/tmp/binpkgs" ntp
```

 packen lassen und dann auf dem arm-Gerät installieren.

Nachdem der Test also erfolgreich war wollte ich daran gehen und die richtig großen Pakete "cross-compilen", dazu gehört unter anderem der xorg-server oder eben auch gtk+ ... 

Leider läßt sich keins der beiden Pakete unter gentoo cross-compilen, sowie ich versuche eine "größere" Software wie libX11, xorg-server oder gtk+ per 

```
xmerge -av gtk+
```

 zu compilieren bricht mir das configure-Skript mit dem Fehler 

```
... can not run test program while cross compiling ...
```

ab.

Das passiert wie gesagt bei jedem "größeren" Programmpaket das irgendwie mit dem X-System zu tun hat.

Und mozilla-firefox kann ich nicht cross-compilen weil er meckert das die "libX11" fehlen würde, was logisch ist da sich ja das X-System nicht cross-compilen läßt.

Im großen und ganzen war das einzige was ich über cross-compiling bisher erreicht habe das ich a) den Kernel übersetzen konnte und b) kleine Pakete wie "ntp" per cross-compile installiert habe.

Leider bringt mir das nicht viel, weil cross-compiling ist für die großen Dinge interessant, Sachen wie ntp oder nfs-utils kann man auch auf der 400MHz-Kiste compilieren lassen, mozilla-firefox dagegen nicht.

Deswegen wollte ich einfach mal wissen ob jemand Erfahrung im Ungang mit cross-compiling unter gentoo hat und ob mir jemand sagen kann warum sich das X-System nicht übersetzen lassen will.

Jede Hilfe wäre echt wichtig, da ich im Augenblick sonst nicht weiterkomme. Es macht einfach keinen Sinn und keinen SPaß eine Software 20 Stunden compilieren zu lassen nur um dann zu sehen das mit einem Fehler abgebrochen wird.

----------

## Finswimmer

Gibt es in der build.log oder von config irgendwelche Lgos, die beschreiben, was für ein Testprogramm das werden soll?

----------

## Gucky_der_Mausbiber

```
>>> Emerging (1 of 32) x11-libs/libX11-1.1.5 for /usr/armv4tl-softfloat-linux-gnueabi/

 * libX11-1.1.5.tar.bz2 RMD160 SHA1 SHA256 size ;-) ...                                                                                                                           [ ok ]

 * checking ebuild checksums ;-) ...                                                                                                                                              [ ok ]

 * checking auxfile checksums ;-) ...                                                                                                                                             [ ok ]

 * checking miscfile checksums ;-) ...                                                                                                                                            [ ok ]

>>> Unpacking source...

>>> Unpacking libX11-1.1.5.tar.bz2 to /var/tmp/portage/x11-libs/libX11-1.1.5/work

 * Running elibtoolize in: libX11-1.1.5

 *   Applying portage-1.5.10.patch ...

 *   Applying sed-1.5.6.patch ...

 *   Applying cross-link-ROOT.patch ...

 *   Applying as-needed-1.5.26.patch ...

>>> Source unpacked in /var/tmp/portage/x11-libs/libX11-1.1.5/work

>>> Compiling source in /var/tmp/portage/x11-libs/libX11-1.1.5/work/libX11-1.1.5 ...

 * econf: updating libX11-1.1.5/config.guess with /usr/share/gnuconfig/config.guess

 * econf: updating libX11-1.1.5/config.sub with /usr/share/gnuconfig/config.sub

./configure --prefix=/usr --build=x86_64-pc-linux-gnu --host=armv4tl-softfloat-linux-gnueabi --mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --localstatedir=/var/lib --prefix=/usr --datadir=/usr/share --disable-ipv6 --without-xcb

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

checking for a thread-safe mkdir -p... /bin/mkdir -p

checking for gawk... gawk

...

...

...

checking whether malloc(0) returns NULL... configure: error: cannot run test program while cross compiling
```

----------

## Josef.95

Schau mal ob dir das https://lists.gnumonks.org/pipermail/openezx-devel/2006-June/000533.html weiterhilft.

Viel Erfolg

----------

## Gucky_der_Mausbiber

irgendwie glaube ich nicht das das ganze zusammen hängt, immerhin ist der Artikel auch schon 3 jahre alt und außerdem habe ich bereits Version 2.63 von autoconf installiert. Also ne, das kann es eigentlich nicht sein, leider.

----------

## 69719

http://sar.informatik.hu-berlin.de/research/publications/SAR-PR-2008-10/SAR-PR-2008-10_.pdf

Dort ist es erklärt, durch änderungen am configure FILE kann man es beheben, dies mußte ich auch Teilweise bei meinem TTMPlayer Projekt anwenden.

----------

## Gucky_der_Mausbiber

Hmm, ja das klingt schon eher nach meinem Problem.

Habe mir das PDF-Dokument auch direkt mal angeschaut und denke das es um den gleichen Fehler dort geht.

Nur, wer soll aus diesem Dokument jetzt eine Lösung ableiten? Okay, ein Programmierer vielleicht. Ich persönlich jedenfalls steige irgendwie gar nicht durch. 

Vielleicht kann mir mal jemand erklären was der Text mir sagen will, und viel wichtiger wie ich das in meinem konkreten Fall umsetzen kann.

----------

## Gucky_der_Mausbiber

Hallo,

ich habe mich gestern abend nochmal hingesetzt und versucht das PDF-Dokument zu verstehen. Und leider musste ich nach 2 Stunden wieder aufgeben, den wenn man nicht gerade selbst C8++)-Programmierer ist kann man dort nicht durchsteigen. Und da das libX11-Paket auch keine "configure.in" hat konnte ich das Beispiel auch nicht nachvollziehen.

Ich habe mich dann nochmal ein paar Stunden durchs Web gewühlt und bin dann auf jemand anderes gestossen, der unter gentoo, ebenfalls das gleiche Problem hat. Tja und wie sich herausgestellt hat scheint dieses Problem für "normalsterbliche" unmöglich.

Tatsache ist das sich X-Server von Haus aus NICHT(!) cross-compilen läßt, Grund ist besagtes Problem aus dem PDF-Dokument (siehe oben). Die einzige Lösung um das Problem zu lösen ist ein großer Haufen von Patches die eingespielt werden müssen, sowie diverse Veränderungen an den Dateien ... lol ... d.h.  unter gentoo müsste man sich für das gesamte X-System ein extra overlay anlegen, dort jedes ebuild per Hand verändern, etc..... lachhaft das ganze.

Für "Nicht-Freaks" ist das einfach zuviel was man da ändern müsste, dadurch ergeben sich dann auch dermassen viele Fehlerquellen das ich lieber ganz die Finger davon lasse.

Finde es nur irgendwie beschämend das das X-System dermassen "schlechte" quellen hat und sich nichtmal ohne größere (kleinere Probleme sind ja nicht schlimm) Probleme cross-compilen läßt. Traurig für Linux und traurig für alle die gerne X-Server auf "nicht-standart" plattformen nutzen wollen.

Damit bleibt mir dann wohl nur der Weg über qemu .....

PS: Oder weiß jemand wie ich den fix & fertig compilierten X-Server von meiner 2GB-SD-Card in meinen SYSROOT überspiele kann? Ich meine ich habe ja z. Bsp. libX11 für arm compiliert und installiert auf dem arm-Gerät (und dort auf der SD-Card). Wenn ich das nun irgendwie in den SYSROOT kopieren könnte und zwar so, das gentoo weiß das es bereits installiert ist, dann müsste es doch eventuell gehen.

----------

## grim

Hallo,

[post=]

Tatsache ist das sich X-Server von Haus aus NICHT(!) cross-compilen läßt

[/post]

ist so eigendlich nicht richtig!

Es gibt andere sehr gur funktionierende crosscopiler

[url]

http://www.lug-schaumburg.de/?q=node/117

[/url] 

Selber ausbrobiert mit einem ultraSparkIIIi > i386.

[post=]

Finde es nur irgendwie beschämend das das X-System dermassen "schlechte" quellen hat

[/post]

ist leider so, seit dem es möglich ist objektorientiert zu programmieren.

gruss

grim

----------

## Gucky_der_Mausbiber

 *Quote:*   

> Es gibt andere sehr gur funktionierende crosscopiler

 

Aber leider nicht für amr-systeme, dort funktioniert cross-compiling nicht. Icecream z.Bsp. gibt es nicht für arm-systeme und ist auch kein cross-compiling im Sinne von crossdev da es kein SYSROOT nutzt, ist eher ne Möglichkeit cpu-unabhängig distcc zu nutzen.

Hätte es aber trotzdem gerne ausprobiert, aber wie gesagt gibt es das zwar für sparc & co, aber nicht für arm. leider.

Vorallem da ich schon versucht habe distcc & crossdev zusammen zu bringen - ohne Erfolg.

----------

