Forum: Compiler & IDEs gcc crosscompile unter linux für mips


von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich will ein crosschain für den MIPS unter Linux bauen. Eigentlich nicht 
aufregendes, doch es läuft nicht durch. Irgendwas wird falsch 
konfiguriert.


Ich habe die Binutils ohne probleme hinbekommen. Allerdings scheiter ich 
beim gcc.




checking stdbool.h usability... no
checking stdbool.h presence... yes
configure: WARNING: stdbool.h: present but cannot be compiled
configure: WARNING: stdbool.h:     check for missing prerequisite 
headers?
configure: WARNING: stdbool.h: see the Autoconf documentation
configure: WARNING: stdbool.h:     section "Present But Cannot Be 
Compiled"
configure: WARNING: stdbool.h: proceeding with the compiler's result
checking for stdbool.h... no
checking stdalign.h usability... no
checking stdalign.h presence... yes
configure: WARNING: stdalign.h: present but cannot be compiled
configure: WARNING: stdalign.h:     check for missing prerequisite 
headers?
configure: WARNING: stdalign.h: see the Autoconf documentation
configure: WARNING: stdalign.h:     section "Present But Cannot Be 
Compiled"
configure: WARNING: stdalign.h: proceeding with the compiler's result
checking for stdalign.h... no
checking for the value of EOF... configure: error: computing EOF failed
make[2]: *** [configure-target-libstdc++-v3] Fehler 1
make[2]: Leaving directory `/home/red/crosscompile/gcc-bootstrap'
make[1]: *** [all] Fehler 2
make[1]: Leaving directory `/home/red/crosscompile/gcc-bootstrap'

ich habe den gleichen Fehler unter Suse11.4 und Fedora 17.
weiter wichtige Hiweise.


BINUTILS = binutils-2.22
GCC = gcc-4.7.2


GCC_OPTS =  \
        --with-newlib\
        --enable-multilib\
        --disable-werror\
        --with-system-zlib\
        --with-float=soft\
        --enable-languages="c,c++" \
        --disable-nls \
        --disable-threads \
        --disable-shared \
        --disable-libssp \
        --disable-hosted-libstdcxx\
        --with-gnu-ld --with-gnu-as


Hier muss ein Fehler im System sein. Wenn ich es richtig lese, hapert es 
an der -libstdc++. Hier habe ich alles installiert was ich zu diesem 
Thema finde. Da der Leidensweg bis der Fehler kommt lange dauert, muss 
ich hier mal fragen ob jemand das Problem kennt und eine Idee hat was 
hier klemmt.
Es ist verhext.

von Roland H. (batchman)


Lesenswert?

Möglichkeit 1: Nimm Pinguino, da ist die MIPS toolchain dabei.

Selber bauen geht auch relativ problemlos.

> Wenn ich es richtig lese, hapert es
> an der -libstdc++.

Dann lass die doch weg.

Der GCC wird in zwei Durchläufen gebaut. Beim ersten Mal üblicherweise 
nur mit "c". "c++" kommt im 2. Durchlauf dazu. Vielleicht liegt es 
daran. Überhaupt hast Du relativ viele Dinge aktiviert im 1. Durchlauf.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Wie sieht das configure vom GCC bzw. binutils aus?

Was macht --disable-hosted-libstdcxx ?

Wozu brauchst du --with-gnu-ld und --with-gnu-as ?

Erste Anlaufstelle für solche Fragen ist die gcc-help@ Mailing-Liste.

von dlya (Gast)


Lesenswert?

Brauchst Du c++ überhaupt?

Schau 'mal in die config.log (oder config.status o.ä), da steht 
normalerweise
mehr drin. Vielleicht hilft das.

von dlya (Gast)


Lesenswert?

>Möglichkeit 1: Nimm Pinguino, da ist die MIPS toolchain dabei.

Codesourcery hat WIMRE auch eine gcc-MIPS Toolcahin.

von Dimi S. (Gast)


Lesenswert?

dlya schrieb:
> Codesourcery hat WIMRE auch eine gcc-MIPS Toolcahin.

Habe ich auch schon benutzt, passt aber nicht ganz für MIPS R2000/R3000,
weil newlib für mips32 gebaut. Es werden sehr viele Befehle benutzt, die
von Plasma bzw. Mais nicht unterstützt werden.

Ich habe auch meine MIPS GCC selber gebaut. Seit dem habe ich einen
vollständigen und funktionierenden C/C++ Compiler mit newlib für
Plasma-Softcore.

MfG

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Johann L. schrieb:
> Wie sieht das configure vom GCC bzw. binutils aus?
>
> Was macht --disable-hosted-libstdcxx ?
Hatte Besserung erhofft.

> Wozu brauchst du --with-gnu-ld und --with-gnu-as ?
Hatte hier abgeschaut.
http://www.ifp.illinois.edu/~nakazato/tips/xgcc.html



Hier kommt mein Makefile:



BINUTILS = binutils-2.22
GCC = gcc-4.7.2



NEWLIB = /data/src/newlib-1.19.0
GDB = /data/src/insight-6.8-1



ARCHITECTURE = mips-elf
PREFIX =/opt/mips



GCC_OPTS =  \
        --with-newlib\
        --enable-multilib\
        --disable-werror\
        --with-system-zlib\
        --with-float=soft\
        --enable-languages="c,c++" \
        --disable-nls \
        --disable-threads \
        --disable-shared \
        --disable-libssp \
        --disable-hosted-libstdcxx\
        --with-gnu-ld --with-gnu-as


download:
        #download binutils
        wget ftp.gnu.org/gnu/binutils/$(BINUTILS).tar.gz
        tar -xzf $(BINUTILS).tar.gz
        #download gcc
        wget 
ftp://ftp.gwdg.de/pub/misc/gcc/releases/$(GCC)/$(GCC).tar.gz
        tar -xzf $(GCC).tar.gz
        #download newlib
        wget ftp://sources.redhat.com/pub/newlib/newlib-1.20.0.tar.gz
        tar -xzf newlib-1.20.0.tar.gz
build-binutils:
        mkdir binutils
        cd binutils; \
        ../binutils-2.22/configure --prefix=$(PREFIX) 
--target=$(ARCHITECTURE) 2>&1 | tee binutils_configure.log; \
        make all 2>&1 | tee binutils_make.log

install-binutils:
        cd binutils; \
        make install 2>&1 | tee binutils_install.log


build-gcc-bs:
        mkdir gcc-bootstrap
        export PATH=$$PATH:$(PREFIX)/bin; \
                cd gcc-bootstrap; \
        ../$(GCC)/configure --target=$(ARCHITECTURE) \
        $(GCC_OPTS) --without-headers \
        --prefix=$(PREFIX)  2>&1 |tee gcc-bs_configure.log;\
        make all 2>&1 | tee gc-bs_make.log

install-gcc:
        cd gcc-bootstrap; \
        make install 2>&1 | tee gcc-bs_install.log

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

>> Wenn ich es richtig lese, hapert es
>> an der -libstdc++.
>
> Dann lass die doch weg.
>
Wie?

> Der GCC wird in zwei Durchläufen gebaut. Beim ersten Mal üblicherweise
> nur mit "c". "c++" kommt im 2. Durchlauf dazu. Vielleicht liegt es
> daran. Überhaupt hast Du relativ viele Dinge aktiviert im 1. Durchlauf.

Was kann ich noch alles abschalten?

von Roland H. (batchman)


Lesenswert?

René D. schrieb:
> mkdir gcc-bootstrap

Eben. Das ist der erste Durchlauf. Darauf folgt das Bauen der newlib, 
danach kommt im 2. Durchlauf C++ dazu.

Genau so steht es auch in dem von Dir geposteten Link. Einfach mal dort 
alles abschauen.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

> Genau so steht es auch in dem von Dir geposteten Link. Einfach mal dort
> alles abschauen.

ich habe doch mit disable mehr abgeschaltet als in dem Link.

Ich versuche es nochmal mit genau den configs im gcc und dan sehen wir 
mehr.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Oje, die ANleitung ist ja Asbach Uralt... für GCC 4.1

- Du willst eine newlib, also gib sie dem Compiler auch!

- Du brauchst GMP/MPFR/MPC, am bequemsten und am konsistentesten geht
  das mit
1
(cd $(GCC); ./contrib/download_prerequisites)

gcc hängt ab von install-binutils.

Übrigens ist das kein bootstrap, die Bezeichnung verwirrt.

von Dimi S. (Gast)


Lesenswert?

Rene,

wenn du bei configure von GCC --enable-languages="c" angibst,
wird nur C-Compiler gebaut. Danach muss aber trotzdem zweite
Durchlauf ausgeführt werden (lingcc.a wird gebaut)

MfG

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Johann L. schrieb:
> Oje, die ANleitung ist ja Asbach Uralt... für GCC 4.1
>
> - Du willst eine newlib, also gib sie dem Compiler auch!

Wie?

>
> - Du brauchst GMP/MPFR/MPC, am bequemsten und am konsistentesten geht

Da hatte er am Anfang gemeckert.  Die habe ich bereits installiert.

>
> gcc hängt ab von install-binutils.

binutils sind bereits installiert und unter /opt/mips sichtbar.


> Übrigens ist das kein bootstrap, die Bezeichnung verwirrt.

Warum? Was fehlt oder ist zuviel?

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

>
> Ich versuche es nochmal mit genau den configs im gcc und dan sehen wir
> mehr.

neuer Versuch ging auch in die Hose.

build-gcc-bs:
        mkdir gcc-bootstrap
        export PATH=$$PATH:$(PREFIX)/bin; \
                cd gcc-bootstrap; \
        ../$(GCC)/configure --target=$(ARCHITECTURE) -prefix=$(PREFIX) \
        --without-headers --with-newlib  --with-gnu-as --with-gnu-ld \
         2>&1 |tee gcc-bs_configure.log;\
        make all 2>&1 | tee gc-bs_make.log




checking for the value of EOF... configure: error: computing EOF failed
make[2]: *** [configure-target-libstdc++-v3] Fehler 1
make[2]: Leaving directory `/home/red/crosscompile/gcc-bootstrap'
make[1]: *** [all] Fehler 2
make[1]: Leaving directory `/home/red/crosscompile/gcc-bootstrap'
[red@PCblack crosscompile]$

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Dimi S. schrieb:

> wenn du bei configure von GCC --enable-languages="c" angibst,
> wird nur C-Compiler gebaut. Danach muss aber trotzdem zweite
> Durchlauf ausgeführt werden (lingcc.a wird gebaut)

Nö, das geht alles automatisch.  Von Hand muss da nix gemacht werden.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

René D. schrieb:
> Johann L. schrieb:
>> - Du willst eine newlib, also gib sie dem Compiler auch!
>
> Wie?

Genau wie mit GMP/MPFR/MPC: Du linkst newlib als newlib in den 
Quellbaum.

>> Übrigens ist das kein bootstrap, die Bezeichnung verwirrt.
>
> Warum? Was fehlt oder ist zuviel?

René D. schrub im Beitrag #2863086:
> Ich will ein crosschain für den MIPS unter Linux bauen.

Du willst einen Cross-Compiler.

Ein Bootstrap ist ein nacktes configure und erzeugt somit keinen 
Cross-Compiler.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

>>> - Du willst eine newlib, also gib sie dem Compiler auch!
>>
>> Wie?
>
> Genau wie mit GMP/MPFR/MPC: Du linkst newlib als newlib in den
> Quellbaum.
>

Warte hier ist was im argen.

Also die GMP/MPFR/MPC habe ich mit dem Paketmanager installiert.
Die newlib gibt es nicht im Paketmanger zumindest bei Fedora17.

Die GMP/MPFR/MPC sieht der host-gcc.

die newlib sieht der host-gcc nicht.

von Dimi S. (Gast)


Lesenswert?

Newlib muss aus Quellen gebaut werden, aber erst, wenn GCC gebaut ist.
Versuch erst mal nur C-Compiler zu bauen. Danach newlib.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Ich hab auch nix von installieren gesagt.

Ich sagte: genauso, wie auch der empfohlene Weg ist, GMP/MPFR/MPC zur 
Verfügung zu stellen.

GCC weiß, was und wie der damit umzugehen hat.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Dimi S. schrieb:
> Newlib muss aus Quellen gebaut werden, aber erst, wenn GCC gebaut ist.

Ersetze "muss" durch "kann".

> Versuch erst mal nur C-Compiler zu bauen. Danach newlib.

Ein int-tree build ist einfacher.  Warum sich mix x configures 
rumärgern, wenn's ein einziges tut?

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

>
> Übrigens ist das kein bootstrap, die Bezeichnung verwirrt.

jetzt sehe ich einen großen Unterschied

ich muss mit make all-gcc starten.

Mal sehen ob das mein Problem ist.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Oh man.
gcc-bootstrap lief durch.

von dose (Gast)


Lesenswert?

jetzt habe ich den gcc erzeugt und installiert.


red@linux-nrd1:~/Desktop> ls /opt/mips/bin
mips-elf-addr2line  mips-elf-g++        mips-elf-jcf-dump 
mips-elf-readelf
mips-elf-ar         mips-elf-gcc        mips-elf-ld        mips-elf-size
mips-elf-as         mips-elf-gcc-4.4.3  mips-elf-ld.bfd 
mips-elf-strings
mips-elf-c++        mips-elf-gccbug     mips-elf-nm 
mips-elf-strip
mips-elf-c++filt    mips-elf-gcj        mips-elf-objcopy
mips-elf-cpp        mips-elf-gcov       mips-elf-objdump
mips-elf-elfedit    mips-elf-gfortran   mips-elf-ranlib


newlib will mit mips-elf-cc loslegen. Habe ich da eine Option vergessen?
oder kann ich einfachen einen link nach mips-elf-gcc ziehen?



/home/red/crosscompile/newlib/mips-elf/newlib/libc/argz'
mips-elf-cc -B/home/red/crosscompile/newlib/mips-elf/newlib/ -isystem 
/home/red/crosscompile/newlib/mips-elf/newlib/targ-include -isystem 
/home/red/crosscompile/newlib-1.20.0/newlib/libc/include 
-B/home/red/crosscompile/newlib/mips-elf/libgloss/mips 
-L/home/red/crosscompile/newlib/mips-elf/libgloss/libnosys 
-L/home/red/crosscompile/newlib-1.20.0/libgloss/mips 
-DPACKAGE_NAME=\"newlib\" -DPACKAGE_TARNAME=\"newlib\" 
-DPACKAGE_VERSION=\"1.20.0\" -DPACKAGE_STRING=\"newlib\ 1.20.0\" 
-DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -I. 
-I../../../../../newlib-1.20.0/newlib/libc/argz -DMISSING_SYSCALL_NAMES 
-fno-builtin      -g -O2 -c -o lib_a-dummy.o `test -f 'dummy.c' || echo 
'../../../../../newlib-1.20.0/newlib/libc/argz/'`dummy.c
/bin/sh: mips-elf-cc: command not found

von Dimi S. (ilovespeccy)


Lesenswert?

dose schrieb:
> newlib will mit mips-elf-cc loslegen. Habe ich da eine Option vergessen?
> oder kann ich einfachen einen link nach mips-elf-gcc ziehen?

Ich hatte es so gelöst:
cp /opt/mips-gcc/bin/mips-elf-gcc /opt/mips-gcc/bin/mips-elf-cc

von Rolf Magnus (Gast)


Lesenswert?

Dimi S. schrieb:
> Ich hatte es so gelöst:
> cp /opt/mips-gcc/bin/mips-elf-gcc /opt/mips-gcc/bin/mips-elf-cc

statt cp besser ein ln -s.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.