# Bekomme CrossCompiling nicht hin!

## sewulba

Hallo...

Ich möchte auf meine IBM IntelliStation Z Pro (dual Pentium Pro 200MHz a 1024MB Cache) ein Gentoo installieren. Grundsystem habe ich ohne DISTCC gemacht. Nun habe ich mir gedacht ich nehme meinen 4 fach Xeon, der auf Gentoo 2006.1 x86_64 läuft zum "Mitcompilieren" damit es nicht so lange dauert. 

Ich bin nach der Anleitung auf http://www.gentoo.org/doc/en/cross-compiling-distcc.xml vorgegangen!

Folgende Fehlermeldung bekomme ich:

```
mein System # crossdev -t i686

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 * Host Portage ARCH:     amd64

 * Target Portage ARCH:   x86

 * Target System:         i686-pc-linux-gnu

 * Stage:                 4 (C/C++ compiler)

 * binutils:              binutils-[latest]

 * gcc:                   gcc-[latest]

 * headers:               linux-headers-[latest]

 * libc:                  glibc-[latest]

 * PORTDIR_OVERLAY:       /usr/local/portage

 * PORT_LOGDIR:           /var/log/portage

 * PKGDIR:                /usr/portage/packages/cross/i686-pc-linux-gnu

 * PORTAGE_TMPDIR:        /var/tmp/cross/i686-pc-linux-gnu

  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~  -  _  -  ~

 * Forcing the latest versions of binutils-config/gcc-config ...                                                                                                            [ ok ]

 * Log: /var/log/portage/cross-i686-pc-linux-gnu-binutils.log

 * Emerging cross-binutils ...                                                                                                                                              [ ok ]

 * Log: /var/log/portage/cross-i686-pc-linux-gnu-gcc-stage1.log

 * Emerging cross-gcc-stage1 ...

 * gcc failed :(

 * If you file a bug, please attach the following logfiles:

 * /var/log/portage/cross-i686-pc-linux-gnu-info.log

 * /var/log/portage/cross-i686-pc-linux-gnu-gcc-stage1.log
```

Ich kann aber in den folgenden 2 Logfiles nichts entdecken, was mich auch nur erahnen lassen würde, woran es hapert!

Auszug aus '/var/log/portage/cross-i686-pc-linux-gnu-gcc-stage1.log'

```
gengtype-lex.c:3470: warning: no previous prototype for 'yyset_debug'

gengtype-lex.c:3476: warning: no previous prototype for 'yylex_destroy'

gcc   -O2 -pipe -DIN_GCC -DCROSS_COMPILE  -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -pedantic -Wno-long-long -Wno-variadic-macros -Wold-style-definition -Wmissing-format-attribute    -DHAVE_CONFIG_H -DGENERATOR_FILE  -o build/gengtype \

         build/gengtype.o build/gengtype-lex.o build/gengtype-yacc.o \

         build/errors.o ../build-x86_64-pc-linux-gnu/libiberty/libiberty.a

/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.1/../../../../x86_64-pc-linux-gnu/bin/ld: warning: i386 architecture of input file `build/gengtype-lex.o' is incompatible with i386:x86-64 output

build/gengtype

make[2]: *** [s-gtype] Segmentation fault

make[2]: Leaving directory `/var/tmp/cross/i686-pc-linux-gnu/portage/gcc-4.1.1-r3/work/build/gcc'

make[1]: *** [all-gcc] Error 2

make[1]: Leaving directory `/var/tmp/cross/i686-pc-linux-gnu/portage/gcc-4.1.1-r3/work/build'

make: *** [all] Error 2

!!! ERROR: cross-i686-pc-linux-gnu/gcc-4.1.1-r3 failed.

Call stack:

  ebuild.sh, line 1546:   Called dyn_compile

  ebuild.sh, line 937:   Called src_compile

  ebuild.sh, line 1255:   Called toolchain_src_compile

  toolchain.eclass, line 24:   Called gcc_src_compile

  toolchain.eclass, line 1538:   Called gcc_do_make

  toolchain.eclass, line 1412:   Called die

!!! emake failed with all

!!! If you need support, post the topmost build error, and the call stack if relevant.

!!! This ebuild is from an overlay: '/usr/local/portage'

... done!

>>> Emerging (1 of 1) cross-i686-pc-linux-gnu/gcc-4.1.1-r3 to /

 * gcc-4.1.1.tar.bz2 MD5 ;-) ...                                                                                                                                            [ ok ]

 * gcc-4.1.1.tar.bz2 RMD160 ;-) ...                                                                                                                                         [ ok ]

 * gcc-4.1.1.tar.bz2 SHA1 ;-) ...                                                                                                                                           [ ok ]

 * gcc-4.1.1.tar.bz2 SHA256 ;-) ...                                                                                                                                         [ ok ]

 * gcc-4.1.1.tar.bz2 size ;-) ...                                                                                                                                           [ ok ]

 * gcc-4.1.1-patches-1.9.tar.bz2 MD5 ;-) ...                                                                                                                                [ ok ]

 * gcc-4.1.1-patches-1.9.tar.bz2 RMD160 ;-) ...                                                                                                                             [ ok ]

 * gcc-4.1.1-patches-1.9.tar.bz2 SHA1 ;-) ...                                                                                                                               [ ok ]

 * gcc-4.1.1-patches-1.9.tar.bz2 SHA256 ;-) ...                                                                                                                             [ ok ]

 * gcc-4.1.1-patches-1.9.tar.bz2 size ;-) ...                                                                                                                               [ ok ]

 * gcc-4.1.1-uclibc-patches-1.1.tar.bz2 MD5 ;-) ...                                                                                                                         [ ok ]

 * gcc-4.1.1-uclibc-patches-1.1.tar.bz2 RMD160 ;-) ...                                                                                                                      [ ok ]

 * gcc-4.1.1-uclibc-patches-1.1.tar.bz2 SHA1 ;-) ...                                                                                                                        [ ok ]

 * gcc-4.1.1-uclibc-patches-1.1.tar.bz2 SHA256 ;-) ...                                                                                                                      [ ok ]

 * gcc-4.1.1-uclibc-patches-1.1.tar.bz2 size ;-) ...                                                                                                                        [ ok ]

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

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

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

 * checking gcc-4.1.1.tar.bz2 ;-) ...                                                                                                                                       [ ok ]

 * checking gcc-4.1.1-uclibc-patches-1.1.tar.bz2 ;-) ...                                                                                                                    [ ok ]

 * checking gcc-4.1.1-patches-1.9.tar.bz2 ;-) ...                                                                                                                           [ ok ]
```

Auszug aus '/var/log/portage/cross-i686-pc-linux-gnu-info.log'

```
XCURSOR_THEME="default"

XDG_CONFIG_DIRS="/usr/kde/3.5/etc/xdg"

XDG_DATA_DIRS="/usr/kde/3.5/share:/usr/share"

XDM_MANAGED="/var/run/xdmctl/xdmctl-:0,maysd,mayfn,sched,rsvd,method=classic"

_="/usr/bin/emerge"
```

Bin für jede Hilfe dankbar!   :Wink: 

Sewulba

----------

## Finswimmer

Soweit ich weiß, muss beim Distcc immer Arch und gcc Version übereinstimmen.

Du hast aber einen Pentium und AMDx64

Tobi

----------

## sewulba

 *Finswimmer wrote:*   

> Soweit ich weiß, muss beim Distcc immer Arch und gcc Version übereinstimmen.
> 
> Du hast aber einen Pentium und AMDx64
> 
> Tobi

 

Habe oben den Link angegeben, wo erklärt wird wie man per DISTCC Crosscompiliert. Es muss also gehen. Ich sehe nur dummerweise meinen Fehler nicht!   :Confused: 

----------

## Child_of_Sun_24

Soweit ich weiß braucht man auf dem amd64 Crossdev nicht, da der Compiler selbst schon für ein i686 Cross-compiling ausgelegt ist, benutz mal eselect compiler um das zu checken.

de.gentoo-wiki.com

www.gentoo-wiki.com

auf einer der beiden Seiten stand das wie man dann distcc benutzen kann irgendwo musste der Schalter -m32 eingefügt werden weiß aber nicht mehr genau wo aber ist ja schnell gefunden dort.

CoS24

----------

## sewulba

 *Child_of_Sun_24 wrote:*   

> Soweit ich weiß braucht man auf dem amd64 Crossdev nicht, da der Compiler selbst schon für ein i686 Cross-compiling ausgelegt ist, benutz mal eselect compiler um das zu checken.
> 
> de.gentoo-wiki.com
> 
> www.gentoo-wiki.com
> ...

 

Hmmmmmm. 'eselect compiler' gibt mir folgendes aus:

```
eselect compiler

!!! Error: Can't load module compiler

exiting.
```

Habe auf beiden Internetseiten gesucht, finde aber rein gar nichts darüber!

Das mit -m32 habe ich gefunden und werde es probieren. Danke!

Melde mich nochmals, ob es funktioniert hat und auch wie!

SeW

----------

## sewulba

Habe es ausprobiert. Keine Chance! 

Bekomme immer an der gleichen Stelle (ausführen von crossdev -t i686-pc-linux-gnu) eine emake-Fehler für cross-gcc-stage1!

Hoffentlich hat noch jemand eine Idee für mich parat! Sonst muss ich alles auf 2 x 200MHz compilieren. *echtz*

SeW

----------

## firefly

öhm da beide prozessoren der x86 architektur-familie angehören brauchst du kein cross-compiler in dem sinne.

denn der 64bit-gcc kann auch 32bit code erstellen. Dafür ist ja der schalter -m32 da.

Um zu testen ob der gcc bei deiner installation das auch kann mach folgendes:

speichere folgende zeilen in eine datei(z.b. test.c):

```
#include "stdio.h"

int main()

{

    printf("hallo world!\n");

    return 0;

}
```

übersetze diese datei mit folgender befehlszeile:

```
gcc -m32 -o test32bit test.c
```

wenn du dann folgendes ausführst

```
file test32bit
```

wenn dann in der ausgabe von file "ELF 32-bit" auftaucht dann kann der gcc bei dir auch 32bit code erzeugen.

Ich vermute das man in der distcc konfiguration zusätzliche cflags/cxxflags angeben kann. Und du must dort halt den schalter -m32 angeben, damit auf deiner amd64-maschine der compiler 32bit code erzeugt. 

Ach ja ich hoffe du hast auf beiden rechnern die selbe gcc-version am laufen. Wobei nur die ersten beiden numern übereinstimmen müssen (z.b. 3.4.x)

----------

## firefly

hmm wie es scheint brauchst du doch nen cross-compiler:

schau dir mal diesen wiki-eintrag an:

http://gentoo-wiki.com/TIP_AMD64-x86-distcc

----------

## sewulba

Die Seite hatte ich auch gefunden. Aber so wie dort beschrieben wurde klappt es auch nicht bei mir. Siehe weiter oben. Bleibe immer mit einem emake-Fehler hängen!

Auf beiden läuft der GCC-4.1.1

Das mit -m32 mal direkt zu testen werde ich mal tun. Es müsste doch irgendwo im DISTCC anzugeben zu sein! Fahre gleich mal nach Hause ums zu testen!   :Wink: 

----------

## sewulba

Nein geht leider nicht!

----------

## firefly

 *sewulba wrote:*   

> Nein geht leider nicht!

 

was heist? geht nicht? geht der test nicht oder was?

ach ja dafür musst du dein system (gcc/glibc) als multilib erstellt/übersetzt haben

was für ein profil verwendest du?

was sagt ein 

```
gcc -v
```

----------

## sewulba

 *firefly wrote:*   

>  *sewulba wrote:*   Nein geht leider nicht! 
> 
> was heist? geht nicht? geht der test nicht oder was?
> 
> ach ja dafür musst du dein system (gcc/glibc) als multilib erstellt/übersetzt haben
> ...

 

multilib steht auf minus. Also kein multilib. Aber ein USE="multilib" bringt auch nichts. Es läßt sich nicht aktivieren!

emerge -pv gcc bringt folgendes:

```
[ebuild   R   ] sys-devel/gcc-4.1.1-r1  USE="fortran gtk nls (-altivec) -bootstrap -build -doc -gcj (-hardened) -ip28 -ip32r10k -mudflap (-multilib) -multislot (-n32) (-n64) -nocxx -objc -objc++ -objc-gc -test -vanilla"
```

SeW

----------

## sewulba

Ach ja und gcc -v bringt das:

```
Using built-in specs.

Target: x86_64-pc-linux-gnu

Configured with: /var/tmp/portage/gcc-4.1.1-r1/work/gcc-4.1.1/configure --prefix=/usr --bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/4.1.1 --includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.1/include --datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.1.1 --mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.1.1/man --infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.1.1/info --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.1/include/g++-v4 --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --disable-libunwind-exceptions --enable-multilib --disable-libmudflap --disable-libssp --disable-libgcj --enable-languages=c,c++,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu

Thread model: posix

gcc version 4.1.1 (Gentoo 4.1.1-r1)
```

SeW

----------

## mv

 *sewulba wrote:*   

> multilib steht auf minus. Also kein multilib. Aber ein USE="multilib" bringt auch nichts.

 

So ganz verstehe ich das neue Konzept auch nicht, aber das multilib USE-Flag scheint inzwischen egal zu sein (deswegen ist es vermutlich auch maskiert): Es scheint inzwischen vielmehr nur darauf anzukommen, dass MULTILIB_ABIS="amd64 x86" gesetzt ist, was normalerweise implizit durch Setzen von /etc/make.profile auf nicht */no-multilib geschieht. Wie Du an gcc -v siehst, wurde ja gcc auch mit --enable-multilib übersetzt.

Diese Information hilft Dir natürlich bei Deinem Problem nicht wirklich weiter...  :Neutral: 

----------

## Mgiese

kann ja hier nicht wirklich helfen, aber ich habe den guide befolgt : http://www.gentoo.org/doc/en/cross-compiling-distcc.xml und dann noch distcc eingerichtet : http://www.gentoo.org/doc/en/distcc.xml

ging bei mir auf anhieb, allerdings benutze ich zum mergen einen pentium3-m und als helper nen pentium 4. das hat mir open office compilieren von 24h auf unter 12h verkürzt  :Wink:  *jipi

----------

## Garwin

Das ist jetzt vielleicht nicht so ganz hilfreich, aber ich hab das vor langer Zeit mal nach dem ersten Teil der Anleitung gemacht, die firefly da oben als Link geposted hat. Also den Teil mit multilib und -m32 in die cflags und dann noch distcc nach der Anleitung im Gentoo-Handbuch, wie von mgiese eins über mir verlinkt, eingerichtet. Damit konnte ich auf meinem Centrinonotebook mit Unterstützung meines AMD64 verteilt kompilieren. Aber wie gesagt ist leider sehr lang her und nur noch rudimentär auf meinem System vorhanden. Der Punkt war wirklich nur -m32 in den cflags und ansonsten Distcc benutzt.

----------

## sewulba

Hier wird andauernd was gesagt von 'm32'...

Ein emerge -pv gcc ergibt aber folgendes bei mir:

```
[ebuild   R   ] sys-devel/gcc-4.1.1-r1  USE="fortran gtk nls (-altivec) -bootstrap -build -doc -gcj (-hardened) -ip28 -ip32r10k -mudflap (-multilib) -multislot (-n32) (-n64) -nocxx -objc -objc++ -objc-gc -test -vanilla" 38,320 kB
```

Da steht 'n32', nicht 'm32'!

Ich blicks wirklich nicht mehr!   :Rolling Eyes: 

Sewulba

PS.: Meine Verwirrung ist komplett!

----------

## Garwin

Das -m32 muß in die CFLAGS in /etc/make.conf

----------

## Mgiese

mittlerweile benutze ich distcc auf 3 maschinen : Pentium3-m, Pentium3 und Pentium4. 

So geht compilen richtig schnell  :Wink:  Aber ich musste ein System(zu testzwecken neu installieren)

 dabei viel mir auf, das Stage3 standardmässig zwar GCC 4.1.1 benutzt aber 

wenn man gleich am anfang zum emergen des System auf mehreren Maschinen "distcc" 

benutzen will muss man als erstes in make.conf CHOST auf "i686-pc-linux-gnu"

(standard i386-pc-linux-gnu) setzen und dann GCC emergen ! erst dann sollte man distcc 

emergen ! weiss ja nicht obs hilfreich war, aber wenn man distcc emerged bevor man gcc 

auf sein CHOST updatet, dann hat es den alten compiler wert, dann KANN es auch nicht gehen.

MFG

----------

## magicteddy

Moin,

 *sewulba wrote:*   

> ... Hoffentlich hat noch jemand eine Idee für mich parat! Sonst muss ich alles auf 2 x 200MHz compilieren. *echtz*
> 
> SeW

 

Notlösung:https://forums.gentoo.org/viewtopic-t-208246-highlight-.html

-andreas

----------

