Kompilieren des GCCs



  • Ich benötige eine andere Version von gfortran auf meinem Mac als die, die mit XCode mitgeliefert wird. Deshalb muss ich den GCC auf meinem Mac kompilieren. Dazu habe ich mir die Resourcen des GCC 4.3.5 (mit der korrekten gfortran Version) runtergeladen und folgendes gemacht:

    1.Configure von GCC ausführen

    gcc-4.3.5$ ./configure --prefix=/Pfad/zu/gcc4.3.5/
    ...
    checking for correct version of gmp.h... no
    configure: error: Building GCC requires GMP 4.1+ and MPFR 2.3.0+.
    Try the --with-gmp and/or --with-mpfr options to specify their locations.
    Copies of these libraries' source code can be found at their respective
    hosting sites as well as at ftp://gcc.gnu.org/pub/gcc/infrastructure/.
    See also http://gcc.gnu.org/install/prerequisites.html for additional info.
    If you obtained GMP and/or MPFR from a vendor distribution package, make
    sure that you have installed both the libraries and the header files.
    They may be located in separate packages.

    2.Anschließend habe ich MPFR (http://www.mpfr.org/) runtergeladen

    mpfr-3.0.0$ ./configure
    ...
    checking for gmp.h... no
    configure: error: gmp.h can't be found, or is unusable.

    3.Also dann GMP (http://gmplib.org/) runtergeladen:

    gmp-5.0.1$ ./configure
    gmp-5.0.1$ make
    gmp-5.0.1$ make install

    Keine Fehler

    4.MPFR nochmal versucht zu kompilieren

    mpfr-3.0.0$ ./configure --with-gmp=/Pfad/zu/gmp-5.0.1/
    mpfr-3.0.0$ make
    mpfr-3.0.0$ make install

    Keine Fehler

    5.Und schließlich für den GCC

    gcc-4.3.5$ ./configure --prefix=/Pfad/zum/gcc4.3.5/ --with-mpfr=/Pfad/zu/mpfr-3.0.0/ --with-gmp=/Pfad/zu/gmp-5.0.1/

    Configure läuft ohne Fehler durch und anschließend führe ich dann ein make aus:

    gcc-4.3.5$ make

    Und erhalte dann folgende Fehlermeldung:

    checking for suffix of object files... configure: error: cannot compute suffix of object files: cannot compile
    See `config.log' for more details.
    make[2]: *** [configure-stage1-target-libgcc] Error 1
    make[1]: *** [stage1-bubble] Error 2
    make: *** [all] Error 2

    Nun steht dort ja "See `config.log' for more details.". Da hab ich natürlich auch reingeschaut, weiss aber nicht wonach ich darin suchen soll (ist ne sehr lange Datei).

    Hat jemand ne Ahnung was hier schief läuft?



  • Siehe hier:
    http://www.c-plusplus.net/forum/280238

    Paketname lautet dann eben "gcc43" statt "gcc45".



  • Du brauchst noch einen Shell-Aufruf (falls das auf dem Mac genauso geht wie unter Linux):

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:Pfad/zu/den/gmp/libs:Pfad/zu/den/mpfr/libs
    

    EDIT: Übrigens kannst du einstellen, dass nur Fortran kompiliert werden soll mit --enable-languages=fortran (vielleicht heißt es auch fort oder f oder was auch immer)



  • Danke erstmal für die Antworten.

    Habe ein export durchgeführt, hat an der Situtation nichts geändert, ich erhalte nach wie vor denselben Fehler. Ebenfalls, wenn ich --enable-language=fortran beim configure script mit angebe, dann erhalte ich wieder denselben Fehler.

    Kann man kontrollieren wohin die Dateien aus einem Finkpaket installiert werden? Ich möchte nämlich sämliche Binaries vom GCC gerne in einem bestimmten Ordner auf der Festplatte ablegen.

    Persönlich finde ich den Ansatz des selber kompilierens besser, weshalb ich lieber die Fehlermeldung verstehen würde und was man dagegen unternehmen kann.



  • Ich habe mir ein komplettes GCC-Buildscript unter Linux erstellt, vielleicht könntest du das ja gebrauchen. Ich muss mal schauen, wann ich mal wieder Linux boote 😉 .



  • HändyÄndy schrieb:

    Kann man kontrollieren wohin die Dateien aus einem Finkpaket installiert werden? Ich möchte nämlich sämliche Binaries vom GCC gerne in einem bestimmten Ordner auf der Festplatte ablegen.

    Ja. Aber es wäre sinnvoller, einfach Symlinks anzulegen, nachdem Du ohnehin alles in /sw liegen hast, ist Fink und der GCC ohnehin schön isoliert.

    Persönlich finde ich den Ansatz des selber kompilierens besser

    Mit Fink wird die GCC ja auch auf Deiner Box kompiliert. Nur dass Du eben eine vernünftige Paketverwaltung verwendest und nicht einfach wild irgendwelches Zeug unversioniert in der Weltgeschichte herumkopierst.



  • So, hier nun mein Linux-Linux Build-\1:
    Du solltest also einen Ordner mit den im Kommentar angegebenen Unterordnern, die die Sourcedateien der jeweiligen Programme/Libraries enthalten, anlegen und ihn dem Script übergeben.
    Da ist jetzt auch libelf für Link-Time-Optimization dabei, entferne sie einfach, da du ja GCC 4.3 verwendest.

    #!/bin/sh
    #Build with host=linux, target=linux:
    
    #Folders: binutils-src, gcc-src, gmp-src, mpfr-src, mpc-src, libelf-src
    
    export BUILDDIR=$1
    cd $BUILDDIR
    
    mkdir Linux
    cd Linux
    mkdir gmp-dest
    mkdir mpfr-dest
    mkdir mpc-dest
    mkdir libelf-dest
    cd ..
    mkdir gcc
    cd gcc
    mkdir binutils-ll-dest
    mkdir gcc-ll-dest
    cd ..
    
    cd gcc/binutils-ll-dest
    ../../binutils-src/configure --prefix=$BUILDDIR/gcc/ll-gcc --enable-shared --enable-multiarch --program-prefix=ll- --enable-nls  --enable-targets=all --disable-werror
    make -j 2 LDFLAGS=-ldl
    make -j 2 install
    cd ../..
    
    cd Linux/gmp-dest
    ../../gmp-src/configure --prefix=$BUILDDIR/Linux/gmp-install
    make -j 2
    make -j 2 install
    cd ../..
    
    cd Linux/mpfr-dest
    ../../mpfr-src/configure --with-gmp=$BUILDDIR/Linux/gmp-install --prefix=$BUILDDIR/Linux/mpfr-install
    make -j 2
    make -j 2 install
    cd ../..
    
    cd Linux/mpc-dest
    ../../mpc-src/configure --with-gmp=$BUILDDIR/Linux/gmp-install --with-mpfr=$BUILDDIR/Linux/mpfr-install --prefix=$BUILDDIR/Linux/mpc-install
    make -j 2
    make -j 2 install
    cd ../..
    
    cd Linux/libelf-dest
    ../../libelf-src/configure --prefix=$BUILDDIR/Linux/libelf-install
    make -j 2
    make -j 2 install
    cd ../..
    
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$BUILDDIR/Linux/gmp-install/lib:$BUILDDIR/Linux/mpfr-install/lib:$BUILDDIR/Linux/mpc-install/lib:$BUILDDIR/Linux/libelf-install/lib
    
    cd gcc/gcc-ll-dest
    ../../gcc-src/configure --enable-languages=c,c++ --prefix=$BUILDDIR/gcc/ll-gcc --enable-threads=posix --program-prefix=ll- --enable-nls --with-gmp=$BUILDDIR/Linux/gmp-install --with-mpfr=$BUILDDIR/Linux/mpfr-install --with-mpc=$BUILDDIR/Linux/mpc-install --with-libelf=$BUILDDIR/Linux/libelf-install --enable-lto
    make -j 2
    make -j 2 install
    cd ../..
    


  • Habe mir gerade fink installiert und leider gibt es dort keinen gcc-4.3.5.



  • Doch. Das Paket gcc43 ist genau die 4.3.5er-GCC.



  • Mmmmh

    apt-cache search gcc
    gcc4.0 - [virtual package representing the gcc 4.0.1 compiler]
    gcc4.2 - [virtual package representing the gcc 4.2.1 compiler]



  • Ja, sagte ich doch. Binärpaket gibt es da keines.

    Befolge doch bitte die verlinkte Anleitung, wenn Du fink install gcc43 machst, sollte das dann gehen.



  • Also bei mir kennt er das Paket nicht:

    sudo fink install gcc43
    Password:
    Scanning package description files..........
    Information about 310 packages read in 1 seconds.
    Failed: no package found for specification 'gcc43'!



  • Ansonsten gibt es bei den Macports ein gcc43 Paket: http://trac.macports.org/browser/trunk/dports/lang/gcc43/Portfile


Anmelden zum Antworten