web-dev-qa-db-fra.com

Comment installer GCC pièce par pièce avec GMP, MPFR, MPC, ELF, sans bibliothèques partagées?

Comment installer GCC (GNU Collection du compilateur)) pièce par pièce, en utilisant la version actuelle,
utilisant les versions correctes des dépendances, n'utilisant pas de gestionnaire de paquets (comme yum, rpm, apt, dpkg) et n'utilisant pas de bibliothèques partagées?

Les développeurs typiques voudront probablement installer GCC de la manière habituelle, utiliser votre gestionnaire de paquets (yum, rpm, apt, dpkg, port, brassage, etc.) ou suivre les instructions ici ( http: //gcc.gnu. org/wiki/InstallerGCC ).

Ma question est de savoir comment installer GCC pièce par pièce, sans bibliothèques partagées.

  • Je souhaite un GCC totalement indépendant pouvant être déplacé dans mon système sans utiliser de bibliothèques partagées ni créer de bibliothèques partagées.
  • C’est ce que GCC appelle "la voie difficile" et qui n’est pas recommandé aux utilisateurs types.

GCC dépend de:

  • GMP: GNU Bibliothèque arithmétique à précision multiple
  • MPFR: GNU Bibliothèque d'arrondissement à virgule flottante à précisions multiples
  • MPC: GNU Bibliothèque C à plusieurs précisions
  • ELF: bibliothèque de formats exécutables et pouvant être liés
  • PPL: bibliothèque de polyèdres Parma (facultatif, pour l'optimisation de la mémoire)
111
joelparkerhenderson

La manière facile

Si vous êtes un développeur typique, vous pouvez installer le moyen le plus simple en utilisant les instructions de http://gcc.gnu.org/wiki/InstallingGCC ou votre gestionnaire de package système, tel que:

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

À la dure

GCC dit que la réponse est "à la dure", car elle construit tout, pièce par pièce, et n'utilise pas de bibliothèques partagées.

Infrastructure GCC

Obtenez l'infrastructure GCC:

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

Placez les téléchargements dans un répertoire temporaire (vous pouvez utiliser le répertoire de votre choix).

/opt/downloads

Construisez l'infrastructure dans un répertoire temporaire différent du répertoire de téléchargement ou de ses sous-répertoires:

/tmp/gcc

Configurez l'infrastructure à l'aide de bibliothèques statiques comme ceci:

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

Le drapeau --disable-shared peut valoir la peine d’être examiné de près, en fonction de vos besoins. J'utilise --disable-shared parce que je construis uniquement du code statique et je veux m'assurer que je ne construis aucun code partagé. Mon besoin est de déplacer facilement les GCC résultants sur mes lecteurs, de sorte que je veux tout le code statique, et je ne veux pas de code partagé. Si vous préférez le code partagé, omettez l'indicateur --disable-shared.

Les versions

Lorsque vous exécutez l'une des commandes de cette réponse, veillez à les mettre à jour pour utiliser le numéro de version actuel de GCC qui correspond à vos besoins. Les commandes de cette réponse sont pour GCC 4.6.2.

Notez que la documentation de GCC indique: "Bien que toute version suffisamment nouvelle des outils requis fonctionne généralement, les exigences en matière de bibliothèque sont généralement plus strictes. Les versions les plus récentes peuvent fonctionner dans certains cas, mais il est plus sûr d'utiliser les versions exactes documentées."

GMP

GMP est la GNU bibliothèque arithmétique à précisions multiples.

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 est la GNU Bibliothèque d'arrondissement à virgules flottantes à précision multiple. Elle dépend de 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 est la GNU bibliothèque C à plusieurs précisions. Elle dépend de GMP et de 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

ELFE

ELF signifie "Exécutable et Linkable Format". Cette bibliothèque fournit une taille et un support endian indépendants de l'architecture.

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 est la collection de compilateurs GNU. Elle dépend de GMP, MPFR, MPC et ELF.

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

Construisez gcc dans un répertoire de travail sur le même point de montage. (Sa construction dans/tmp déclencherait des problèmes de compilation croisée avec l'hôte)

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

La commande configure et ses indicateurs doivent figurer sur une seule ligne de commande (cet article les affiche sur des lignes distinctes, uniquement en raison de la largeur de la page Web).

Remarque: nous utilisons le chemin complet pour configurer et ne définissons pas les variables d'environnement du chemin de la bibliothèque. Nous avons choisi de désactiver bootstrap) et de désactiver les bibliothèques partagées parce que nous ne les voulons pas (les utilisateurs types peuvent vouloir les deux), et d’utiliser des threads posix et des indicateurs qui sont des valeurs par défaut parce que nous les voulons ( les utilisateurs peuvent vouloir utiliser d'autres threads ou ignorer les indicateurs par défaut) .YMMV et en savoir plus sur les indicateurs ici

/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

Cette page est idéale pour les informations d’installation de GCC, sa construction, divers indicateurs, et plus encore:

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

Mises à jour

Les bibliothèques ppl peuvent être utilisées pour optimiser la mémoire: voir bugseng.com/products/ppl/Download (Merci Paul dans les commentaires)

Vous pouvez exécuter ./contrib/download_prerequisites à partir du répertoire source gcc. (Merci à N7P sur Reddit)

119
joelparkerhenderson

La réponse acceptée rend loin plus compliqué que nécessaire et n’est pas correct pour toutes les versions. Construire GCC avec --disable-shared est généralement une très mauvaise idée. Voir http://gcc.gnu.org/wiki/InstallingGCC pour une approche plus simple.

Le processus complet ne devrait pas être plus difficile que cela (remplacer 4.6.2 par la version que vous voulez construire):

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

(Mais s'il vous plaît lisez le lien ci-dessus quand même, il contient des informations utiles.)

Apparemment, certaines personnes sur Ubuntu ont des tonnes de merdes dans leur environnement qui interfèrent avec le processus de construction de GCC, et elles ont besoin de les supprimer en premier:

unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE LD_LIBRARY_PATH
115
Jonathan Wakely

Je travaille sur un cluster. Seul le nœud maître est connecté à Internet. Le logiciel sur les nœuds est obsolète et généralement pas maintenu. Je n'ai pas d'accès root. J'ai deux options:

  • construire le logiciel statique dont j'ai besoin (paquets de calcul); ou
  • construire des compilateurs statiques.

J'ai choisi le second et construit gcc, g ++ et gfortran.

J'ai tout construit

PREFIX=$HOME/cmp/soft/sft

et pour make j'ai utilisé

THREADS=8

Ci-dessous, gcc est construit avec

  • GMP
  • MPFR
  • MPC
  • ISL
  • CLOOG

On peut obtenir le dernier gcc à partir d’ici: ftp://gcc.gnu.org/pub/gcc/releases

Les dépendances se trouvent ici: ftp://gcc.gnu.org/pub/gcc/infrastructure

Les dépendances

Je reçois des dépendances avec le script suivant:

#!/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

La fonction bash suivante est utilisée ci-dessous:

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

Chacune des commandes ci-dessous doit être émise dans le répertoire de la bibliothèque que vous venez de télécharger.

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
24
Adobe

Utilisé ce que Jonathan a mentionné ci-dessus, sauf que je devais télécharger gmp et mpfr manuellement et créer un lien symbolique (la distribution 4.4.2 de gcc n'a probablement pas de "prérequis de téléchargement")

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

Btw, en utilisant "-with-gmp" et "with-mpfr" avec "./configure" m'a donné "configure: erreur: ne peut pas calculer le suffixe des fichiers objet: ne peut pas compiler". J'ai donc téléchargé les srcs de gmp et mpfr puis créé le lien qui y est associé depuis gcc src top leve dir

6
vptr

Après avoir essayé d’installer des dépendances GCC comprenant GMP, MPFR et MPC. I a rencontré des exigences d'installation supplémentaires, des erreurs et des fichiers manquants; tels que le fichier d’en-tête gmp.h requis par MPFR pour l’installation. Il existe un certain nombre de problèmes que vous rencontrerez au cours du processus. Cependant, il existe un moyen plus simple de construire et d’installer GCC-X.0.0 ou plus tard version avec un lien automatique .

OPTION UN.

Pour éviter les problèmes de construction avec make, make install, et lier les bibliothèques dynamiques, simplement:

  • Téléchargez votre version GCC-X.0.0 (avec la dernière version à partir de: https://gcc.gnu.org/ )
  • Extrayez les fichiers gcc-X-000.tar.gz dans un emplacement/chemin /.
  • Une fois que vous avez extrait le fichier .tar.gz, exécutez le script ./ contrib/download_prerequisites situé sur/un chemin/ou le répertoire source.
  • Ce script téléchargera des bibliothèques de support comprenant: GMP, MPFR et [~ # ~] mpc [~ # ~] et créera un liens symboliques pour vous, qui [~ # ~] construira [~ # ~ ] toutes les dépendances de gcc automatiquement dans le cadre du processus d’installation de gcc.

    Il n'est pas nécessaire de créer et de lier des bibliothèques de support téléchargées dans/une voie d'accès/en émettant Make, Make Install ou en cours d'exécution ./ configure fichier ou en ajoutant des liens tels que --with-gmp =/gmp_path/.../....., --with-mpfr =/mpfr_path/.../... car cela a été fait lorsque vous avez exécuté un script qui créé des liens symboliques .

OPTION DEUX.

  • Utilisez votre système de gestion de packages OS pour installer les bibliothèques de support dans un emplacement système standard. Sous Debian, y compris Ubuntu, installez libgmp-dev, libmpfr-dev et libmpc-dev paquets. Pour les systèmes basés sur RPM, y compris Fedora et SUSE, installez gmp-devel, et libmpc-devel ( mpc-devel sur SUSE).
  • Cette option installera les bibliothèques et les fichiers d'en-tête dans un répertoire système standard où ils seront trouvés automatiquement lors de la construction de GCC.
  • C'est l'avantage de la gestion de l'installation des packages du système d'exploitation lorsque vous appelez "Sudo apt-get install libgmp-dev" ou "Sudo apt-get install libmpfr- dev " install et la liaison est faite pour vous. De plus, vous n’avez pas besoin de construire les bibliothèques de support avec Make, Make install ou ./ configure. De plus, processus prend quelques minutes pour terminer le processus tout.
  • Vous pouvez maintenant continuer avec l'installation de GCC.

CONFIGURATION:

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

Problème:

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:

- enable-languages ​​ tels que c ++ ou c.

- disable-multilib ; Si vous désactivez multilib en fonction de votre système et de votre système d'exploitation, vous serez invité à le faire.

Faire prendra longtemps pour terminer. Cependant, vous pouvez émettre l'option -j #no_pro. Ceci exécutera Make simultanément en parallèle en fonction du nombre de processeurs sur votre PC ou Mac.

Pour des informations détaillées sur l'exécution de ce processus, vous pouvez visiter: https://gcc.gnu.org/wiki/InstallingGCC .

1
Juniar

J'ai suivi la réponse la plus acceptée de joelparkerhenderson. C’est la meilleure solution que je puisse trouver pour installer sur un système * NIX sur Internet.

Pour la postérité, je veux ajouter que si vous obtenez une erreur du type "erreur d'installation: impossible de calculer le suffixe des fichiers objet: impossible de compiler"

puis mettez à jour votre LD_LIBRBARY_PATH avec/tmp/gcc/lib (voir la réponse complète de joelparkerhenderson pour le contexte)

/ tmp/gcc/lib contient tous les fichiers mpfr/mpc/gmp requis pour que les fichiers et l'éditeur de liens au moment de l'exécution ne puissent pas les trouver, à moins que vous ne les ajoutiez à LD_LIBRARY_PATH. N'oubliez pas non plus d'exporter LD_LIBRARY_PATH;). Plus de contexte ici: https://gcc.gnu.org/wiki/FAQ#configure_suffix

0
Abhimanu Kumar