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, 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ée. Pour appeler gcc-3.3, je dois utiliser la commande gcc-3.3 .

Comment puis-je changer le compilateur par défaut en gcc-3.3? Lorsque j’exécute la commande gcc elle doit appeler gcc-3.3 et non gcc-4.4.

En outre, comment puis-je changer la variable CXX dans un fichier make en gcc-3.3? Je souhaite changer une place mondiale commune dans le système au lieu de changer tous les fichiers make.

Comme @Tommy l’a suggéré, vous devez utiliser update-alternatives .
Il assigne des valeurs à chaque logiciel d’une famille, de sorte qu’il définisse l’ordre dans lequel les applications seront appelées.

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

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

 update-alternatives --query gcc 

Maintenant, notez la priorité atsortingbuée à gcc-4.4 car vous devrez donner une valeur supérieure à gcc-3.3 .
Pour définir vos alternatives, vous devriez avoir quelque chose comme ceci (en supposant que votre installation gcc se trouve dans /usr/bin/gcc-3.3 et que la priorité de gcc-4.4 est 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 passer facilement d’une version à l’autre. Tapez update-alternatives --config gcc pour être invité à choisir la version de gcc que vous souhaitez utiliser parmi celles installées.

–edit 2 –

Maintenant, pour corriger la variable d’environnement CXX à l’échelle du système, vous devez mettre la ligne indiquée par @ DipSwitch dans votre fichier .bashrc (cela appliquera la modification uniquement à votre utilisateur, ce qui est plus sûr à mon avis):

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

Voici un exemple complet de la réponse de jHackTheRipper pour la foule TL; DR. 🙂 Dans ce cas, je voulais lancer g ++ – 4.5 sur un système Ubuntu dont la valeur par défaut est 4.6. En tant que 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 le mode par défaut (alias “mode automatique”), mais je passe explicitement à 4.5 temporairement (mode manuel). Pour revenir à 4.6:

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

(Notez l’utilisation de cpp-bin au lieu de cpp . Ubuntu a déjà une alternative cpp avec un lien maître de /lib/cpp . Renommer ce lien supprimerait le lien /lib/cpp , ce qui pourrait briser les scripts.)

Voici la description et les instructions détaillées pour créer et gérer des alternatives maître et esclave (gcc et g ++).

En bref 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 

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

Créez un groupe d’alternatives au compilateur où le compilateur de dissortingbution 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 

REMARQUE: 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 maître “cpp”.

Liste des alternatives au compilateur disponibles:

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

Pour sélectionner manuellement la version 4.9 de gcc, g ++ et cpp, faites:

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

Vérifiez les versions du compilateur:

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

Restaurer les parameters du compilateur distro (ici: retour à la v4.6):

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

Entre 4.8 et 6 avec tous les --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 

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

J’ai trouvé ce problème en essayant d’installer un nouveau compilateur Clang. Il s’avère que les responsables de Debian et de LLVM conviennent tous deux que le système de remplacement devrait être utilisé pour des alternatives, PAS pour la gestion des versions .

La solution qu’ils proposent est quelque chose comme ceci:
PATH=/usr/lib/llvm-3.7/bin:$PATH
où /usr/lib/llvm-3.7/bin est un répertoire créé par le paquetage llvm-3.7 et qui contient tous les outils avec leurs noms non suffixés. Avec cela, llvm-config (version 3.7) apparaît avec son nom clair dans votre PATH. Pas besoin de passer par les liens symboliques, ni d’appeler le llvm-config-3.7 qui a été installé dans / usr / bin.

En outre, recherchez un package nommé llvm-defaults (ou gcc-defaults), qui pourrait offrir une autre manière de le faire (je ne l’ai pas utilisé).

Si vous souhaitez un moyen plus rapide (mais toujours très propre) d’y parvenir à des fins personnelles (par exemple, si vous souhaitez créer un projet spécifique présentant des exigences ssortingctes concernant la version du compilateur), suivez simplement les étapes suivantes:

  • tapez echo $PATH et cherchez un répertoire personnel ayant une très haute priorité (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 sûr, cela fonctionnera pour un seul utilisateur (ce n’est pas une solution à l’échelle du système), mais d’autre part, je n’aime pas changer trop de choses dans mon installation.

J’ai utilisé uniquement les lignes ci-dessous et cela a fonctionné. Je voulais juste comstackr VirtualBox et VMWare WorkStation utilisant le kernel 4.8.10 sur Ubuntu 14.04 . Au départ, la plupart des choses ne fonctionnaient pas, par exemple les graphiques et la mise en réseau. J’ai eu de la chance que le VMWare workstation requirejs pour gcc 6.2.0 . Je ne pouvais pas démarrer mes Genymotion Android emulators car Virtualbox était en panne. Publiera 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