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

comment installer GCC (la collection de compilateurs GNU) morceau par morceau, en utilisant la version actuelle,

utiliser les versions correctes des dépendances, ne pas utiliser un gestionnaire de paquets (comme yum, rpm, apt, dpkg), et ne pas utiliser de bibliothèques partagées?

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

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

  • je veux un GCC entièrement indépendant qui peut être déplacé autour de mon système sans utiliser de bibliothèques partagées, et sans créer de bibliothèques partagées.
  • C'est ce que GCC appelle" la voie difficile " et il n'est pas recommandé pour les utilisateurs typiques.

GCC dépend de:

  • GMP: GNU Multiple Precision Arithmetic Library
  • MPFR: GNU Multiple-precision floating-point rounding library
  • CPP: GNU Multiple precision de la bibliothèque C
  • ELF: l'Exécutable et Linkable Format de bibliothèque
  • PPL: bibliothèque de polyèdres de Parme (optionnel, pour des optimisations de mémoire)
103
demandé sur Cœur 2012-02-26 07:53:35

6 réponses

La Voie De La Facilité

si vous êtes un développeur typique, vous pouvez installer la manière facile, en utilisant les instructions à http://gcc.gnu.org/wiki/InstallingGCC ou votre gestionnaire de paquets 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 la réponse ici est "la manière dure" parce qu'il construit tout morceau par morceau, et n'utilise pas les bibliothèques partagées.

GCC infrastructure

Obtenir la GCC de l'infrastructure:

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

Mettre les téléchargements dans un répertoire temporaire (vous pouvez utiliser n'importe quel répertoire vous voulez).

/opt/downloads

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

/tmp/gcc

configurer l'infrastructure En utilisant des bibliothèques statiques comme ceci:

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

le drapeau -- disable-shared peut être intéressant à regarder de plus près en fonction de vos besoins. J'utilise --disable-shared parce que je ne construis que 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 autour de 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 l'option --disable-shared.

Versions

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

notez que la documentation de GCC dit: "Alors que n'importe quelle version suffisamment nouvelle des outils requis fonctionne habituellement, les exigences de bibliothèque sont généralement plus strictes. Les versions plus récentes peuvent fonctionner dans certains cas, mais il est plus sûr d'utiliser les versions exactes documenté."

GMP

GMP est la bibliothèque D'arithmétique de précision multiple 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 à virgule flottante. Cela dépend du 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 Multi-précision GNU. Cela dépend des 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. Ce la bibliothèque fournit une taille indépendante de l'architecture et un support 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 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

construire 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 Configurer et ses drapeaux doivent être tous sur une seule commande ligne (ce post Les montre sur des lignes séparées juste en raison de la largeur de la page web).

Note: Nous utilisons le chemin complet pour configurer et ne définissons pas les variables d'environnement de chemin de bibliothèque. Nous choisissons de désactiver bootstrap et de désactiver 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 flags qui sont par défaut parce que nous les voulons (les utilisateurs typiques peuvent vouloir utiliser d'autres threads ou sauter les flags par défaut). YMMV et lire à propos des drapeaux 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 parfaite pour les informations d'installation de GCC, comment le construire, divers drapeaux, 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)

You pourrait exécuter ./contrib / download_prerequeduites du répertoire source de gcc. (Merci à N7P sur reddit)

115
répondu joelparkerhenderson 2017-01-09 13:20:05

la réponse acceptée la rend far plus compliquée que nécessaire et n'est pas correcte 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.

le processus entier 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 lire le lien ci-dessus de toute façon, il contient des informations utiles.)

apparemment, certaines personnes sur Ubuntu ont des tonnes de merde mis dans leur environnement qui interfère avec le processus de construction GCC, et ils ont besoin d'enlever que d'abord:

unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE LD_LIBRARY_PATH
106
répondu Jonathan Wakely 2017-07-20 19:47:54

je travaille sur un cluster. Seul le noeud maître est connecté à Internet. Le logiciel sur les noeuds est désuet et généralement pas maintenu. Je n'ai pas accès à la racine. J'ai deux options:

  • construire statique de logiciels dont j'ai besoin (calcul des paquets); 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

  • BPF
  • MPFR
  • MPC
  • ISL
  • CLOOG

on peut obtenir le dernier gcc d'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  ]; then
        case  in
            *.tar.bz2)   tar xvjf     ;;
            *.tar.gz)    tar xvzf     ;;
            *.bz2)       bunzip2      ;;
            *.rar)       unrar x      ;;
            *.gz)        gunzip       ;;
            *.tar)       tar xvf      ;;
            *.tbz2)      tar xvjf     ;;
            *.tgz)       tar xvzf     ;;
            *.zip)       unzip        ;;
            *.Z)         uncompress   ;;
            *.7z)        7z x         ;;
            *)           echo "I don't know how to extract ''..." ;;
        esac
    else
        echo "'' 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 dir de la base de données 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
répondu Adobe 2016-02-07 06:52:44

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

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 "-avec-gmp" et "avec mpfr" avec "./configure" m'a "configure: error: impossible de calculer le suffixe des fichiers de l'objet: ne peut pas compiler". Par conséquent, j'ai téléchargé les CSR de gmp et mpfr et j'ai ensuite créé le lien vers celui-ci à partir de gcc src TOP leve dir

6
répondu vptr 2012-11-16 22:02:48

après avoir essayé d'installer des dépendances GCC dont GMP, MPFR et MPC. j'ai rencontré des exigences d'installation supplémentaires, des erreurs et des fichiers manquants, tels que gmp.h fichier d'en-tête requis par MPFR pour l'installation. Il y arrêter un certain nombre de problèmes que vous rencontrerez dans le processus. Cependant, il existe un moyen plus simple de construire et D'installer GCC-X. 0.0 ou plus tard version avec un automatique lien .

PREMIÈRE OPTION.

pour sauver la peine de construire avec make, make install et relier les bibliothèques dynamiques, simplement:

  • Téléchargez votre GCC-X. 0.0-version (avec la dernière version de: https://gcc.gnu.org / )
  • extrait le gcc-X-000.tar.gz fichiers à un emplacement /chemin/.
  • une fois que vous avez Extrait .tar.gz fichier, lancez ./contrib/download_prerequipes script qui est situé sur/ somepath / ou le répertoire source.
  • ce script téléchargera les bibliothèques de soutien y compris: GMP, MPFR et MPC et créera un Symlinks pour vous, qui sera construire toutes les dépendances de gcc automatiquement comme partie du processus d'Installation de gcc.

    pas besoin de construire et de relier les bibliothèques de support qui ont été téléchargées vers /somepath/ en émettant Make, Make Install ou en lançant ./ configurer le fichier ou ajouter des liens tels que --with-gmp=/gmp_path/.../....., --with-mpfr= / mpfr_path/.../... parce que cela a été fait quand vous avez lancé script qui a créé symlinks .

OPTION DEUX.

  • utilisez votre système de gestion de paquets OS pour installer les bibliothèques de support dans l'emplacement standard du système. Pour le système basé sur Debian incluant Ubuntu, installez les paquets libgmp-dev, libmpfr-dev et libmpc-dev . Pour les systèmes basés sur la vitesse de rotation, Y compris Fedora et SUSE, installer gmp-devel, et libmpc-devel ( mpc-devel sur les colis 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 D'installation de paquets OS lorsque vous invoquez " sudo apt-get install libgmp-dev" ou " sudo apt-get install libmpfr-dev " l'installation et le lien sont faits pour vous. En outre, vous ne devez pas construire les bibliothèques de soutien avec faire, faire installer ou ./configurer. de plus, le processus prend quelques minutes pour compléter le tout.
  • 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 tels que c++ ou c.

--disable-multilib ; disable multilib basé sur votre système et OS, on vous demandera à propos de multilib de continuer.

prend beaucoup de temps. Cependant, vous pouvez émettre l'option-j #no_pro. Cela permettra de Faire exécuter concurremment en parallèle basé sur le nombre de processeurs sur votre PC ou Mac.

pour des informations détaillées sur la façon d'exécuter ce processus, vous pouvez visiter: https://gcc.gnu.org/wiki/InstallingGCC .

1
répondu Juniar 2018-04-24 20:46:44

j'ai suivi la réponse la plus acceptée par joelparkerhenderson. C'est la meilleure réponse que j'ai pu trouver pour installer sur un système *NIX sur internet.

pour la postérité je veux ajouter que si vous obtenez une erreur comme "erreur d'installation: ne peut pas calculer le suffixe des fichiers de l'objet: ne peut pas 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 ainsi et le temps d'exécution linker ne peut pas les trouver à moins que vous 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
répondu Abhimanu Kumar 2015-08-18 20:26:09