112 votes

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

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

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

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

  • Je veux un GCC totalement indépendant qui peut être déplacé sur mon système sans utiliser aucune bibliothèque partagée, et sans créer aucune bibliothèque partagée.
  • C'est ce que GCC appelle "la méthode difficile" et elle n'est pas recommandée pour les utilisateurs habituels.

GCC dépend de :

  • GMP : Bibliothèque arithmétique à précision multiple de GNU (GNU Multiple Precision Arithmetic Library)
  • MPFR : Bibliothèque GNU d'arrondi en virgule flottante à précision multiple.
  • MPC : Bibliothèque GNU en C à précision multiple
  • ELF : Bibliothèque au format exécutable et lisible
  • PPL : Parma Polyhedra Library (facultatif, pour des optimisations de la mémoire)

121voto

joelparkerhenderson Points 10128

La méthode simple

Si vous êtes un développeur classique, vous pouvez procéder à l'installation de la manière la plus simple, en suivant les instructions à l'adresse suivante http://gcc.gnu.org/wiki/InstallingGCC ou le gestionnaire de paquets de votre système, par exemple :

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

La méthode dure

GCC dit que la réponse ici est "la manière forte" parce qu'il construit tout morceau par morceau, et n'utilise pas de bibliothèques partagées.

Infrastructure du CCG

Obtenez l'infrastructure du CCG :

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

Mettez les téléchargements dans un répertoire temporaire (vous pouvez utiliser le répertoire que vous voulez).

/opt/downloads

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

/tmp/gcc

Configurez l'infrastructure en utilisant des 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 plus 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 pas de code partagé. Mon besoin est de déplacer le GCC résultant sur mes disques facilement, donc je veux tout le code statique, et je ne veux pas de code partagé. Si vous préférez le code partagé, omettez le drapeau --disable-shared.

Versions

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

Notez que la documentation GCC dit : "Alors 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. Des versions plus récentes peuvent fonctionner dans certains cas, mais il est plus sûr d'utiliser les versions exactes documentées."

BPF

GMP est la bibliothèque arithmétique à précision multiple de GNU.

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 bibliothèque GNU d'arrondi en virgule flottante à 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 bibliothèque C à précision multiple de GNU. Elle dépend de GMP et 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 est l'abréviation de Executable and Linkable Format. Cette bibliothèque fournit un support de la taille et de l'endian indépendant 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

CCG

GCC est la collection de compilateurs GNU. Il 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 scratch sur le même point de montage. (Le construire dans /tmp déclencherait des problèmes de compilation croisée).

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

La commande configure et ses drapeaux doivent figurer sur une seule ligne de commande (dans cet article, ils sont présentés sur des lignes séparées 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 choisissons de désactiver le bootstrap et les bibliothèques partagées parce que nous ne les voulons pas (les utilisateurs typiques peuvent vouloir les deux), et d'utiliser les threads posix et les drapeaux par défaut parce que nous les voulons (les utilisateurs typiques peuvent vouloir utiliser d'autres threads ou sauter les drapeaux par défaut). YMMV et lisez à propos des drapeaux aquí

/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 sur l'installation de GCC, comment le construire, les différents drapeaux, et plus encore :

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

Mises à jour

Les bibliothèques ppl peuvent être utilisées pour des optimisations de 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 de gcc. (Merci à N7P sur reddit)

117voto

Jonathan Wakely Points 45593

La réponse acceptée fait que 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 facile.

El tout le site 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 lisez quand même le lien ci-dessus, il contient des informations utiles).

Apparemment, certaines personnes sur Ubuntu ont des tonnes de conneries dans leur environnement qui interfèrent avec le processus de construction de GCC, et ils doivent d'abord les supprimer :

unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE LD_LIBRARY_PATH

25voto

Adobe Points 1592

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

  • construire les logiciels statiques dont j'ai besoin (paquets informatiques) ; ou
  • construire des compilateurs statiques.

J'ai choisi la seconde et construit gcc, g++ et gfortran.

J'ai tout construit en

PREFIX=$HOME/cmp/soft/sft

et pour make J'ai utilisé

THREADS=8

Ci-dessous, gcc est construit avec

  • BPF
  • MPFR
  • MPC
  • ISL
  • CLOOG

On peut obtenir la dernière version de gcc ici : ftp://gcc.gnu.org/pub/gcc/releases

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

Dépendances

J'obtiens 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 lancée dans le répertoire de la librairie qui vient d'être téléchargée.

BPF

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

7voto

Diwakar Points 21

J'ai utilisé ce que Jonathan ci-dessus a mentionné, sauf que j'ai dû télécharger gmp et mpfr manuellement et créer un lien logiciel (la distribution gcc 4.4.2 n'a probablement pas de "download_prerequisites").

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

Par ailleurs, l'utilisation de "-with-gmp" et "with-mpfr" avec "./configure" m'a donné "configure : error : cannot compute suffix of object files : cannot compile". J'ai donc téléchargé les sources de gmp et mpfr, puis j'ai créé un lien logiciel vers ces fichiers à partir du répertoire supérieur de gcc src.

2voto

Juniar Points 191

Après avoir essayé d'installer les dépendances GCC, notamment BPF, MPFR y MPC. J'ai rencontré des exigences d'installation supplémentaires, des erreurs et des fichiers manquants, comme le fichier d'en-tête gmp.h nécessaire à l'installation de MPFR. Il y a un certain nombre de problèmes que vous rencontrerez au cours du processus. Cependant, il existe un moyen plus facile de construire et d'installer le logiciel. GCC-X.0.0 o plus tard version avec un liaison automatique .

OPTION 1.

Pour éviter les problèmes de construction avec make, make install et de liaison des bibliothèques dynamiques, il suffit d'utiliser le logiciel make :

  • Téléchargez votre GCC-X.0.0 -version (avec la dernière version de : https://gcc.gnu.org/ )

  • Extrayez les fichiers gcc-X-000.tar.gz vers un emplacement /somepath/.

  • Une fois que vous avez extrait le fichier .tar.gz, exécutez ./contrib/download_prerequisites script qui est situé sur /somepath/ ou le répertoire source.

  • Ce script téléchargera les bibliothèques de support, notamment : BPF, MPFR y MPC et créera un Symlinks pour vous, qui BUILD toutes les dépendances de gcc automatiquement dans le cadre du processus d'installation de gcc.

    Il n'est pas nécessaire de construire et de lier les bibliothèques de support qui ont été téléchargées dans le répertoire /somepath/ en émettant la commande Make, Make Install ou en cours d'exécution ./configure ou l'ajout de liens tels que --with-gmp=/gmp_path/.../....., --with-mpfr=/mpfr_path/.../... car cela a été fait lorsque vous avez exécuté script qui créait liens symétriques .

OPTION DEUX.

  • Utilisez le système de gestion des paquets de votre système d'exploitation pour installer les bibliothèques de support dans l'emplacement standard du système. Pour les systèmes basés sur Debian, y compris Ubuntu, installez libgmp-dev, libmpfr-dev y 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 paquets de l'OS lorsque vous invoquez "sudo apt-get install libgmp-dev" o "sudo apt-get install libmpfr-dev" L'installation et la liaison sont faites pour vous. De plus, vous n'avez pas besoin de construire les bibliothèques de support avec Make, Make install o ./configure. De plus, le processus ne prend que quelques minutes.
  • Maintenant vous pouvez procéder à l'installation de GCC.

CONFIGURATION :

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

Question :

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 comme c++ ou c.

--disable-multilib ; désactiver multilib en fonction de votre système et de votre OS, vous serez invité à parler de multilib pour continuer.

La fabrication prendra beaucoup de temps. Cependant, vous pouvez utiliser l'option -j #no_pro. Ceci exécutera Make en parallèle en fonction du nombre de processeurs de votre PC ou Mac.

Pour des informations détaillées sur la manière d'exécuter ce processus, vous pouvez consulter le site : https://gcc.gnu.org/wiki/InstallingGCC .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X