J'ai donc installé gcc-4.4 et gcc-4.3 (idem pour g ++). Pour autant que je m'en souvienne, il existe un outil dans Ubuntu qui définit les liens symboliques pour vous si vous lui indiquez simplement la version de votre choix. Cependant, cela ne semble pas fonctionner dans la nouvelle version, ce qui me déçoit.
root@nexus:~# update-alternatives --config gcc
update-alternatives: error: no alternatives for gcc.
root@nexus:~# update-alternatives --config cc
There is only one alternative in link group cc: /usr/bin/gcc
Nothing to configure.
root@nexus:~# dpkg -l | grep gcc | awk '{print $2}'
gcc
gcc-4.3
gcc-4.3-base
gcc-4.3-multilib
gcc-4.4
gcc-4.4-base
gcc-4.4-multilib
gcc-4.5-base
gcc-multilib
lib32gcc1
libgcc1
Des idées?
Réponses:
D'abord effacé la configuration actuelle des alternatives de mise à jour pour gcc et g ++:
Installer des paquets
Il semble que gcc-4.3 et gcc-4.4 sont tous deux installés après l'installation de build-essential. Cependant, nous pouvons installer explicitement les packages suivants:
Installer des alternatives
Les liens symboliques cc et c ++ sont installés par défaut. Nous installerons les liens de symboles pour gcc et g ++, puis lierons cc et c ++ à gcc et g ++ respectivement. (Notez que les options
10
,20
et30
sont les priorités de chaque alternative.)Configurer les alternatives
La dernière étape consiste à configurer les commandes par défaut pour gcc, g ++. Il est facile de basculer de manière interactive entre 4.3 et 4.4:
Ou passez en utilisant le script:
la source
exécuter dans le terminal:
Ok, donc cette partie est assez simple. La difficulté réside dans le fait que lorsque vous exécutez la commande GCC, il s’agit en réalité d’un lien sybolique vers la version de GCC que vous utilisez. Cela signifie que nous pouvons créer un lien symbolique de GCC vers la version de GCC de notre choix.
la source
Est-ce vraiment souhaitable? Il y a des changements ABI entre les
gcc
versions. Compiler quelque chose avec une version (par exemple l’ensemble du système d’exploitation) puis compiler quelque chose d’autre avec une autre version peut être source de conflit.Par exemple, les modules du noyau doivent toujours être compilés avec la même version que celle
gcc
utilisée pour compiler le noyau. Dans cet esprit, si vous modifiez manuellement le lien symbolique entre/usr/bin/gcc
la version utilisée dans votre version d'Ubuntu et la version utilisée par celle-ci, les futurs modules construits par DKMS pourraient utiliser unegcc
version incorrecte .Si vous voulez juste construire des choses avec une version différente de
gcc
, c'est assez facile, même avec des scripts. Par exemple, vous pouvez transmettre la version degcc
dans laCC
variable d’environnement:Vous n’avez peut-être pas besoin de cela dans la commande make (les scripts de configuration le tirent habituellement) mais cela ne fait pas de mal.
la source
gcc
ne fait pas partie dualternatives
système et pourquoi cela n'est pas particulièrement souhaitable. Si aucun de ceux-ci ne va changer d'avis, faites-le simplement manuellement.$ sudo apt-get install gcc-6 gcc-7 $ CC="gcc-7" ./configure <much output> $ make # uses gcc-7
Considérantsudo update-alternatives gcc gcc-7
que vous auriez fait en sorte de ne pas changer accidentellement d’ABI.Modifier:
Cela suppose que vous ayez d'abord installé la version, avec par exemple:
Original:
Et voici une ligne pour ceux qui sont paresseux, il suffit de changer le numéro à la fin pour obtenir la version souhaitée. Cela fera le changement pour gcc et / ou g ++
Dans cet exemple, je suis passé à 4.9
Il n'y a pas de vérification d'erreur et ce qui n'est pas dans cet exemple, vous voudrez peut-être vérifier ce qui sera exécuté avant de l'exécuter. Ajoutez juste echo avant sudo . Par souci d'exhaustivité, je fournis également une ligne de contrôle:
Le résultat de la vérification devrait être quelque chose comme:
Vous pouvez vérifier la version après avec avec:
Explication semi-détaillée:
la source
Que diriez-vous d'un lien symbolique dans un répertoire temporaire:
mkdir x && PATH=$PWD/x:$PATH && ln -s /usr/bin/g++-7 $PWD/x/g++
la source