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.
GCC dépend de:
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
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.
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.
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 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 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 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
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 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
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)
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
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:
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
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
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.
mkdircd build
../configure --disable-shared --enable-static --prefix=$PREFIX/gmp
make -j $THREADS && make check && make install
mkdircd build
../configure --with-gmp=$PREFIX/gmp --disable-shared --enable-static --prefix=$PREFIX/mpfr
make -j $THREADS && make install
mkdircd build
../configure --with-gmp=$PREFIX/gmp --with-mpfr=$PREFIX/mpfr --disable-shared --enable-static --prefix=$PREFIX/mpc
make -j $THREADS && make install
mkdircd build
../configure --with-gmp-prefix=$PREFIX/gmp --disable-shared --enable-static --prefix=$PREFIX/isl
make -j $THREADS && make install
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
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
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
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:
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.
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 .
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