Come installare GCC, pezzo per pezzo, con GMP, MPFR, MPC, ELF, senza librerie condivise?

StackOverflow https://stackoverflow.com/questions/9450394

  •  13-11-2019
  •  | 
  •  

Domanda

Come faccio a installare GCC (GNU Compiler Collection), pezzo per pezzo, con l'attuale versione,
utilizzando le versioni corrette di dipendenze, non utilizzando un gestore di pacchetti (come yum, rpm, apt, dpkg), e non utilizza le librerie condivise?

Tipico sviluppatori probabilmente desidera installare GCC il tipico modo, utilizzare il gestore di pacchetti yum, rpm, apt, dpkg, porta, birra, etc.) o seguire le istruzioni qui (http://gcc.gnu.org/wiki/InstallingGCC).

La mia domanda è: come installare GCC pezzo per pezzo, senza le librerie condivise.

  • Voglio una completamente indipendente GCC, che può essere spostato intorno al mio sistema senza l'utilizzo di alcun librerie condivise, e senza creare delle librerie condivise.
  • Questo è ciò che GCC chiama "difficile", e non è raccomandato per gli utenti tipici.

GCC dipende da:

  • GMP:GNU Più Precisione Aritmetica Biblioteca
  • MPFR:GNU Più a virgola mobile a precisione arrotondamento biblioteca
  • MPC:GNU precisione Multipla libreria C
  • ELF:Eseguibile e Linkable Format library
  • PPL:Parma Polyhedra Library (facoltativo, per le ottimizzazioni di memoria)
È stato utile?

Soluzione

Il Modo Più Semplice

Se sei un tipico sviluppatore, è possibile installare in modo semplice, seguendo le istruzioni a http://gcc.gnu.org/wiki/InstallingGCC o sistema gestore di pacchetti come:

apt  install gcc  # for Debian, Ubuntu, etc.
yum  install gcc  # for RedHat, CentOS, etc.
brew install gcc  # for Mac OS X

Il Modo Più Duro

GCC dice qui la risposta è "difficile" perché si costruisce di tutto, pezzo per pezzo, e non fa uso di librerie condivise.

GCC infrastrutture

Ottenere il GCC infrastrutture:

ftp://gcc.gnu.org/pub/gcc/infrastructure/

Mettere i download in una directory temporanea (è possibile utilizzare qualsiasi directory che si desidera).

/opt/downloads

Costruire l'infrastruttura in una directory temporanea che è diverso il download di directory o sottodirectory:

/tmp/gcc

Configurare l'infrastruttura che utilizza le librerie statiche come questo:

./configure --disable-shared --enable-static --prefix=/tmp/gcc

L'opzione --disable-condivisa bandiera può essere una scelta a seconda delle vostre esigenze.Io uso --disable-condivisa perché sto costruendo codice statico solo, e voglio fare in modo che io non costruire qualsiasi tipo di codice condiviso.Il mio bisogno è quello di spostare la risultante di GCC in giro per la mia unità facilmente, quindi voglio che tutti statica del codice, e non voglio il codice condiviso.Se si preferisce il codice condiviso, omettere l'opzione --disable-condivisa bandiera.

Versioni

Quando si esegue qualsiasi dei comandi in questa risposta, assicurarsi di aggiornare i comandi per utilizzare l'attuale versione di GCC numero che corrisponde alle vostre esigenze.I comandi in questa risposta sono per GCC 4.6.2.

Nota che il GCC documentazione dice:"Mentre qualsiasi sufficientemente nuova versione degli strumenti necessari di solito lavoro, biblioteca requisiti sono generalmente più severi.Le versioni più recenti possono funzionare in alcuni casi, ma è più sicuro usare le versioni esatte documentata."

GMP

GMP è la GNU Più Precisione Aritmetica Biblioteca.

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
bunzip2 gmp-4.3.2.tar.bz2
tar xvf gmp-4.3.2.tar
cd gmp-4.3.2
./configure --disable-shared --enable-static --prefix=/tmp/gcc
make && make check && make install

MPFR

MPFR GNU Più a virgola mobile a precisione arrotondamento biblioteca.Dipende da GMP.

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
bunzip2 mpfr-2.4.2.tar.bz2
tar xvf mpfr-2.4.2.tar
cd mpfr-2.4.2
./configure --disable-shared --enable-static --prefix=/tmp/gcc --with-gmp=/tmp/gcc
make && make check && make install

MPC

MPC è il GNU precisione Multipla C library.Dipende da GMP e MPFR.

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
tar zxvf mpc-0.8.1.tar.gz
cd mpc-0.8.1
./configure --disable-shared --enable-static --prefix=/tmp/gcc --with-gmp=/tmp/gcc --with-mpfr=/tmp/gcc
make && make check && make install

ELF

ELF sta per file Eseguibile e Collegabile Formato.Questa libreria fornisce l'architettura indipendente dimensioni e di supporto endian.

wget http://www.mr511.de/software/libelf-0.8.13.tar.gz
tar zxvf libelf-0.8.13.tar.gz
cd libelf-0.8.13
./configure --disable-shared --enable-static --prefix=/tmp/gcc
make && make check && make install

GCC

GCC è il Compilatore GNU Collezione.Dipende da GMP, MPFR, MPC e l'ELFO.

wget http://www.netgull.com/gcc/releases/gcc-4.6.2/gcc-4.6.2.tar.gz
tar zxvf gcc-4.6.2.tar.gz

Compilare gcc in una directory sul stesso punto di montaggio.(Edificio è all'interno di /tmp potrebbe innescare la cross-compilazione host problemi)

mkdir -p /opt/downloads/gcc-4.6.2-scratch
cd /opt/downloads/gcc-4.6.2-scratch

Il comando di configurazione e le sue bandiere devono essere tutti su una riga di comando (questo post mostra su righe separate solo per la pagina web di larghezza).

Nota:Usiamo il percorso completo per configurare e non impostare il percorso della libreria variabili di ambiente.Possiamo scegliere di disabilitare l'avvio e disabilitare le librerie condivise, perché non vogliamo loro (tipici gli utenti possono sia), e per l'uso dei thread posix e per le bandiere che sono predefinite perché li vogliamo (tipici gli utenti possono utilizzare altri thread o saltare flag di default).YMMV, e leggere le bandiere qui

/opt/downloads/gcc-4.6.2/configure
  --disable-shared
  --disable-bootstrap
  --disable-libstdcxx-pch
  --enable-languages=all
  --enable-libgomp
  --enable-lto
  --enable-threads=posix
  --enable-tls
  --with-gmp=/tmp/gcc
  --with-mpfr=/tmp/gcc
  --with-mpc=/tmp/gcc
  --with-libelf=/tmp/gcc
  --with-fpmath=sse
make && make install

Questa pagina è grande per l'installazione di GCC info, come costruirla, di bandiere e di più:

http://www.acsu.buffalo.edu/~charngda/cc_build.html

Aggiornamenti

Il ppl librerie possono essere utilizzati per le ottimizzazioni di memoria:vedere bugseng.com/products/ppl/Download (Grazie Paolo nei commenti)

Si potrebbe eseguire ./contrib/download_prerequisites dal gcc directory di origine.(Grazie a N7P su reddit)

Altri suggerimenti

La risposta accettata lo fa lontano Più complicato del necessario e non è corretto per tutte le versioni. Costruire GCC con --disable-shared Di solito è una pessima idea. Vedere http://gcc.gnu.org/wiki/installinggcc per un approccio più semplice.

Il tutto Il processo non dovrebbe essere più difficile di questo (in sostituzione di 4.6.2 con la versione che si desidera creare):

tar xzf gcc-4.6.2.tar.gz
cd gcc-4.6.2
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-4.6.2/configure --prefix=$HOME/GCC-4.6.2 
make
make install

(Ma per favore leggi il link sopra comunque, contiene informazioni utili.)

Apparentemente alcune persone su Ubuntu hanno tonnellate di merda ambientate nel loro ambiente che interferisce con il processo di build GCC e devono prima rimuoverlo:

unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE LD_LIBRARY_PATH

Lavoro su un cluster. Solo il nodo principale è connesso a Internet. Il software sui nodi è obsoleto e generalmente non mantenuto. Non ho accesso alle root. Ho due opzioni:

  • Costruisci software statico di cui ho bisogno (pacchetti computazionali); o
  • Costruisci compilatori statici.

Ho scelto il secondo e ho costruito GCC, G ++ e Gfortran.

Ho costruito tutto dentro

PREFIX=$HOME/cmp/soft/sft

e per make ero solito

THREADS=8

Di seguito, GCC è costruito con

  • GMP
  • Mpfr
  • MPC
  • ISL
  • Cloog

Si può ottenere l'ultimo GCC da qui: ftp://gcc.gnu.org/pub/gcc/releases

Le dipendenze si trovano qui: ftp://gcc.gnu.org/pub/gcc/infrastructure

Dipendenze

Ricevo dipendenze con il seguente script:

#!/bin/sh

# ===========
## variables:

GMP=gmp-4.3.2.tar.bz2
MPFR=mpfr-2.4.2.tar.bz2
MPC=mpc-0.8.1.tar.gz
ISL=isl-0.12.2.tar.bz2
CLOOG=cloog-0.18.1.tar.gz

MIRROR=ftp://gcc.gnu.org/pub/gcc/infrastructure


# ===========
## functions:

extract() {
    if [ -f $1 ]; then
        case $1 in
            *.tar.bz2)   tar xvjf $1    ;;
            *.tar.gz)    tar xvzf $1    ;;
            *.bz2)       bunzip2 $1     ;;
            *.rar)       unrar x $1     ;;
            *.gz)        gunzip $1      ;;
            *.tar)       tar xvf $1     ;;
            *.tbz2)      tar xvjf $1    ;;
            *.tgz)       tar xvzf $1    ;;
            *.zip)       unzip $1       ;;
            *.Z)         uncompress $1  ;;
            *.7z)        7z x $1        ;;
            *)           echo "I don't know how to extract '$1'..." ;;
        esac
    else
        echo "'$1' is not a valid file!"
    fi
}

# ======================
## download and extract:

wget $MIRROR/$GMP
extract $GMP

wget $MIRROR/$MPFR
extract $MPFR

wget $MIRROR/$MPC
extract $MPC

wget $MIRROR/$ISL
extract $ISL

wget $MIRROR/$CLOOG
extract $CLOOG

Di seguito viene utilizzata la seguente funzione bash:

mkdircd () { mkdir -p "$@" && eval cd "\"\$$#\""; }

Ciascuno dei comandi seguenti deve essere emesso nella Dir della Lib appena scaricata.

GMP

mkdircd build
../configure --disable-shared --enable-static --prefix=$PREFIX/gmp
make -j $THREADS && make check && make install

Mpfr

mkdircd build
../configure --with-gmp=$PREFIX/gmp --disable-shared --enable-static --prefix=$PREFIX/mpfr
make -j $THREADS && make install

MPC

mkdircd build
../configure --with-gmp=$PREFIX/gmp --with-mpfr=$PREFIX/mpfr --disable-shared --enable-static --prefix=$PREFIX/mpc
make -j $THREADS && make install

ISL

mkdircd build
../configure --with-gmp-prefix=$PREFIX/gmp --disable-shared --enable-static --prefix=$PREFIX/isl
make -j $THREADS && make install

Cloog

mkdircd build
../configure --with-gmp-prefix=$PREFIX/gmp --with-isl-prefix=$PREFIX/isl --disable-shared --enable-static --prefix=$PREFIX/cloog
make -j $THREADS && make install

GCC

mkdircd build
export LD_LIBRARY_PATH=$PREFIX/gmp/lib:$PREFIX/mpfr/lib:$PREFIX/mpc/lib:$PREFIX/isl/lib:$PREFIX/cloog/lib
export C_INCLUDE_PATH=$PREFIX/gmp/include:$PREFIX/mpfr/include:$PREFIX/mpc/include:$PREFIX/isl/include:$PREFIX/cloog/include
export CPLUS_INCLUDE_PATH=$PREFIX/gmp/include:$PREFIX/mpfr/include:$PREFIX/mpc/include:$PREFIX/isl/include:$PREFIX/cloog/include
../configure --with-gmp=$PREFIX/gmp --with-mpfr=$PREFIX/mpfr --with-mpc=$PREFIX/mpc --with-isl=$PREFIX/isl --with-cloog=$PREFIX/cloog --disable-shared --enable-static --disable-multilib --prefix=$PREFIX/gcc --enable-languages=c,c++,fortran
make -j $THREADS bootstrap && make install

Usato quello che Jonathan sopra ha menzionato, tranne per il fatto che ho dovuto scaricare manualmente GMP e MPFR e creare un link soft (distribuzione GCC 4.4.2 probabilmente non ha "download_prerequisites")

cd src/gcc-4.4.2
ln -s ~/linux64/gmp-4.2.1  gmp
ln -s ~/linux64/mpfr-2.3.0 mpfr

Btw, usando "-with-gmp" e "with-mpfr" con "./configure" mi ha dato "Configura: errore: non è in grado di calcolare il suffisso dei file di oggetti: non è possibile compilare". Quindi ho scaricato gli SRC di GMP e MPFR e quindi ho creato il collegamento soft ad esso dall'interno di GCC SRC Top Leve Dir

Dopo aver tentato di installare dipendenze GCC, incluso GMP, MPFR e MPC. Mi sono imbattuto in ulteriori requisiti di installazione, errori e file mancanti; come il file di intestazione GMP.H richiesto da MPFR per l'installazione. Ci sono una serie di problemi in cui ti imbatterai nel processo. Tuttavia, esiste un modo più semplice per costruire e installare GCC-X.0.0 o dopo versione con un collegamento automatico.

Opzione uno.

Per salvare il problema di costruire con marca, installare e collegare le librerie dinamiche, semplicemente:

  • Scarica la tua versione GCC -X.0.0 (con l'ultima versione da: https://gcc.gnu.org/)
  • Estrai i file GCC-X-000.tar.gz in una posizione /qualchePath /.
  • Una volta estratto il file .tar.gz, esegui ./contrib/download_prerequisites Script che si trova on / qualchepath / o la directory di origine.
  • Questo script scaricherà librerie di supporto tra cui: GMP, MPFR e MPC e creerà un file Collegamenti simbolici Per te, questo lo farà COSTRUIRE Tutte le dipendenze GCC automaticamente come parte del processo di installazione GCC.

    Non è necessario costruire e collegare le librerie di supporto che sono state scaricate su / qualchepath / emettendo Fare, fare installazione o correre ./Configure File o aggiungendo collegamenti come--with-gmp =/gmp_path/... .....,--with-mpfr =/mpfr_path/.../... perché è stato fatto quando hai eseguito lo script creato collegamenti simbolici.

Opzione due.

  • Utilizzare il sistema di gestione dei pacchetti del sistema operativo per installare le librerie di supporto nella posizione del sistema standard. Per il sistema basato su Debian tra cui Ubuntu, Installa libgmp-dev, libmpfr-dev e libmpc-dev pacchi. Per il sistema basato su RPM tra cui Fedora e SUSE, installa gmp-devel, e libmpc-devel(MPC-Devel su suse) pacchetti.
  • Questa opzione installerà librerie e file di intestazione in una directory di sistema standard in cui verranno trovati a marcia durante la costruzione di GCC.
  • Questo è il vantaggio della gestione dell'installazione del pacchetto del sistema operativo quando si invoca "Sudo Apt-get Installa libgmp-dev" o "Sudo Apt-get Installa libmpfr-dev" L'installazione e il collegamento sono eseguiti per te. Inoltre, non devi costruire le librerie di supporto Fare, fare installazione o ./Configure. Inoltre, il processo richiede alcuni minuti per completare tutto il processo.
  • Ora puoi procedere con l'installazione GCC.

CONFIGURAZIONE:

This is the GCC config Process, with gcc-X-000.tar.gz 

Problema:

tar -xvf gcc-X-000.tar.gz 
cd gcc-X-000
./contrib/download_prerequisites
cd ..
mkdir objdir
/../gcc-X-000/configure --prefix=$HOME/gcc-X-000 --enable-languages=c,c++,fortran,go --disable-multilib
make -j 2
make install

NB:

-Nable-linguages come C ++ o C.

-Disable-Multilib; Disabilita Multilib in base al sistema e al sistema operativo, ti verrà richiesto di procedere MultiLib.

Make richiederà molto tempo per essere completato. Tuttavia, puoi emettere l'opzione -j #no_pro. Questo funzionerà in modo contemporaneamente in parallelo in base al numero di processori sul PC o sul Mac.

Per informazioni dettagliate su come eseguire questo processo è possibile visitare:https://gcc.gnu.org/wiki/installinggcc.

Ho seguito la risposta più accettata di Joelparkerhenderson. Questa è la migliore risposta che ho potuto trovare per l'installazione su un sistema *Nix su Internet.

Per i posteri voglio aggiungere che se si ottiene un errore come "Errore di installazione: non è possibile calcolare il suffisso dei file di oggetti: non è possibile compilare"

Quindi aggiorna il tuo ld_librbary_path con/tmp/gcc/lib (vedi la risposta completa di JoelparkerHenderson per il contesto)

/TMP/GCC/LIB contiene tutti i file MPFR/MPC/GMP richiesti e il linker di runtime Cannt li trovano a meno che non li aggiunga a LD_Library_Path. Inoltre non dimenticare di esportare ld_library_path;). Più contesto qui: https://gcc.gnu.org/wiki/faq#configure_suffix

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top