web-dev-qa-db-fra.com

Comment changer le compilateur GCC par défaut dans Ubuntu?

J'ai installé gcc-3.3/g ++ - 3.3 sur Ubuntu 11.04 qui a déjà gcc/g ++ - 4.4. Donc, dans mon système, les versions gcc-3.3 et 4.4 sont disponibles. Je peux appeler les deux compilateurs comme je le souhaite. Si j'appelle simplement la commande gcc, alors gcc-4.4 sera appelé. Pour appeler gcc-3.3, je dois utiliser la commande gcc-3.3

Comment puis-je changer le compilateur par défaut en tant que gcc-3.3? Quand j'exécute la commande gcc, il devrait appeler gcc-3.3 et non pas gcc-4.4.

De plus, comment puis-je changer la variable CXX dans un fichier make en gcc-3.3? Je souhaite modifier un emplacement global commun dans le système au lieu de modifier tous les fichiers de création.

85
RoboAlex

Comme @Tommy l'a suggéré, vous devriez utiliser update-alternatives.
Il attribue des valeurs à tous les logiciels d’une famille afin de définir l’ordre dans lequel les applications seront appelées. 

Il est utilisé pour gérer différentes versions du même logiciel sur un système. Dans votre cas, vous pourrez utiliser plusieurs déclinaisons de gcc et une sera favorisée.

Pour déterminer les priorités actuelles de gcc, tapez la commande indiquée par le commentaire de @ tripleee:

update-alternatives --query gcc

Notez maintenant la priorité attribuée à gcc-4.4 car vous devrez attribuer une priorité supérieure à gcc-3.3.
Pour définir vos alternatives, vous devriez avoir quelque chose comme ceci (en supposant que votre installation gcc soit située à /usr/bin/gcc-3.3 et que la priorité de gcc-4.4 soit inférieure à 50) :

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.3 50

--modifier--

Enfin, vous pouvez également utiliser l'interface interactive de update-alternatives pour basculer facilement entre les versions. Tapez update-alternatives --config gcc pour être invité à choisir la version de gcc que vous voulez utiliser parmi celles installées.

--edit 2 -

Maintenant, pour réparer la variable d’environnement CXX dans tout le système, vous devez insérer la ligne indiquée par @ DipSwitch dans votre fichier .bashrc (ceci n’appliquera la modification que pour votre utilisateur, ce qui est plus sûr à mon avis):

echo 'export CXX=/usr/bin/gcc-3.3' >> ~/.bashrc
97
jopasserat

Voici un exemple complet de la réponse de jHackTheRipper pour la foule TL; DR. :-) Dans ce cas, je voulais exécuter g ++ - 4.5 sur un système Ubuntu dont la valeur par défaut est 4.6. Comme root:

apt-get install g++-4.5
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 100
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.5 50
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 100
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 50
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.6 100
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.5 50
update-alternatives --set g++ /usr/bin/g++-4.5
update-alternatives --set gcc /usr/bin/gcc-4.5
update-alternatives --set cpp-bin /usr/bin/cpp-4.5

Ici, 4.6 est toujours la valeur par défaut (alias "mode auto"), mais je passe explicitement à la version 4.5 temporairement (mode manuel). Pour revenir en 4.6:

update-alternatives --auto g++
update-alternatives --auto gcc
update-alternatives --auto cpp-bin

(Notez l'utilisation de cpp-bin au lieu de simplement cpp. Ubuntu a déjà une alternative cpp avec un lien principal de /lib/cpp. Renommer ce lien enlèverait le lien /lib/cpp, ce qui risquerait de casser des scripts.)

65
Trevor Robinson

C’est la bonne description et des instructions pas à pas pour créer et gérer des alternatives maître et esclave (gcc et g ++).

Bientôt c'est:

Sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
Sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
Sudo update-alternatives --config gcc
17
Anton K

Maintenant, il y a gcc-4.9 disponible pour Ubuntu/precise.

Créez un groupe de variantes de compilateur où le compilateur distro a une priorité plus élevée:

root$ VER=4.6 ; PRIO=60
root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO

root$ VER=4.9 ; PRIO=40
root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO

NOTE: La version de g ++ est modifiée automatiquement avec un commutateur de version de gcc. cpp-bin doit être fait séparément car il existe une alternative principale "cpp".

Énumérer les alternatives de compilateur disponibles:

root$ update-alternatives --list gcc
root$ update-alternatives --list cpp-bin

Pour sélectionner manuellement les versions 4.9 de gcc, g ++ et cpp, procédez comme suit:

root$ update-alternatives --config gcc
root$ update-alternatives --config cpp-bin

Vérifier les versions du compilateur:

root$ for i in gcc g++ cpp ; do $i --version ; done

Restaurez les paramètres du compilateur de la distribution (ici: retour à la v4.6):

root$ update-alternatives --auto gcc
root$ update-alternatives --auto cpp-bin
7
dileks

Entre 4,8 et 6 avec tous --slaves:

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 \
                    10 \
                    --slave   /usr/bin/cc cc /usr/bin/gcc-4.8 \
                    --slave   /usr/bin/c++ c++ /usr/bin/g++-4.8 \
                    --slave   /usr/bin/g++ g++ /usr/bin/g++-4.8 \
                    --slave   /usr/bin/gcov gcov /usr/bin/gcov-4.8 \
                    --slave   /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-4.8 \
                    --slave   /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-4.8 \
                    --slave   /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-4.8 \
                    --slave   /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-4.8 \
                    --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-4.8

et

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 \
                    15 \
                    --slave   /usr/bin/cc cc /usr/bin/gcc-6 \
                    --slave   /usr/bin/c++ c++ /usr/bin/g++-6 \
                    --slave   /usr/bin/g++ g++ /usr/bin/g++-6 \
                    --slave   /usr/bin/gcov gcov /usr/bin/gcov-6 \
                    --slave   /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-6 \
                    --slave   /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-6 \
                    --slave   /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-6 \
                    --slave   /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-6 \
                    --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-6

Basculez entre eux avec update-alternatives --config gcc.

5
szotsaki

Si vous voulez un moyen plus rapide (mais toujours très propre) de le réaliser à des fins personnelles (par exemple, si vous voulez construire un projet spécifique ayant des exigences strictes concernant la version du compilateur), suivez les étapes suivantes:

  • tapez echo $PATH et cherchez un répertoire personal ayant une priorité très élevée (dans mon cas, j'ai ~/.local/bin);
  • ajoutez les liens symboliques dans ce répertoire:

Par exemple:

ln -s /usr/bin/gcc-WHATEVER ~/.local/bin/gcc
ln -s /usr/bin/g++-WHATEVER ~/.local/bin/g++

Bien entendu, cela ne fonctionnera que pour un seul utilisateur (ce n'est pas une solution à l'échelle du système), mais d'un autre côté, je n'aime pas trop changer de choses dans mon installation.

1
Thomas Baruchel

J'ai trouvé ce problème en essayant d'installer un nouveau compilateur Clang. Il s'avère que la Debian _ et les responsables de la LLVM sont d'accord que le système alternatif devrait être utilisé pour alternatives, PAS pour versioning

La solution proposée ressemble à ceci:
PATH=/usr/lib/llvm-3.7/bin:$PATH
où /usr/lib/llvm-3.7/bin est un répertoire créé par le paquet llvm-3.7 et contenant tous les outils avec leurs noms sans suffixe. Avec cela, llvm-config (version 3.7) apparaît avec son nom complet dans votre PATH. Nul besoin de se moquer de liens symboliques, ni d'appeler le llvm-config-3.7 qui a été installé dans/usr/bin.

Aussi, recherchez un paquet nommé llvm-defaults (ou gcc-defaults), qui pourrait offrir une autre façon de faire cela (je ne l'ai pas utilisé).

1
hmijail

J'ai utilisé uniquement les lignes ci-dessous et cela a fonctionné. Je voulais juste compiler VirtualBox et VMWare WorkStation en utilisant kernel 4.8.10 sur Ubuntu 14.04. Initialement, la plupart des choses ne fonctionnaient pas, par exemple les graphiques et les réseaux. J'ai eu de la chance que VMWare workstation soit demandé pour gcc 6.2.0. Je n'ai pas pu démarrer mon Genymotion Android emulators car la virtualbox était en panne. Afficherons les résultats plus tard si nécessaire.

VER=4.6 ; PRIO=60
Sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
VER=6 ; PRIO=50
Sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
VER=4.8 ; PRIO=40
Sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
0
nyxee