¿Descargó g ++ 4.8 del PPA pero no puede configurarlo como predeterminado?

15

He descargado g ++ 4.8 en Ubuntu 12.10 haciendo:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-4.8

pero cuando lo hago:

sudo update-alternatives --config g++

para cambiar las versiones de g ++ dice:

update-alternatives: error: no alternatives for g++.

Sin embargo si lo hago:

g++ --version

dice:

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

¿Cómo configuro mi instalación de g ++ 4.8 para que sea la g ++ predeterminada?

usuario997112
fuente

Respuestas:

11

En primer lugar, debe descubrir dónde están sus 4.8 binarios de todas las herramientas:

$ which gcc-4.8
/usr/bin/gcc-4.8
$ which g++-4.8
/usr/bin/g++-4.8
$ ls /usr/bin/*-4.8
/usr/bin/cpp-4.8         /usr/bin/x86_64-linux-gnu-cpp-4.8
/usr/bin/g++-4.8         /usr/bin/x86_64-linux-gnu-g++-4.8
/usr/bin/gcc-4.8         /usr/bin/x86_64-linux-gnu-gcc-4.8
/usr/bin/gcc-ar-4.8      /usr/bin/x86_64-linux-gnu-gcc-ar-4.8
/usr/bin/gcc-nm-4.8      /usr/bin/x86_64-linux-gnu-gcc-nm-4.8
/usr/bin/gcc-ranlib-4.8  /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.8
/usr/bin/gcov-4.8

Entonces, tenemos todos nuestros binarios, ahora veamos si algunos enlaces simbólicos están disponibles para dichos binarios:

$ cd /usr/bin
$ ls -l gcc* cpp g++
lrwxrwxrwx 1 root root      7 sep 18 14:02 cpp -> cpp-4.7
lrwxrwxrwx 1 root root      7 abr 22  2013 g++ -> g++-4.7
lrwxrwxrwx 1 root root      7 sep 18 14:02 gcc -> gcc-4.7

Como podemos ver, solo cpp, g++y gcctiene enlaces simbólicos. Tenemos dos opciones aquí.

Symlinking

Reemplazamos los enlaces simbólicos con los nuestros, eliminando primero los datos reales:

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++

Entonces creando el nuestro

sudo ln -s /usr/bin/cpp-4.8 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++

Para revertirlo, use los mismos comandos pero con 4.7 o 4.6 en su lugar

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/cpp-4.7 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.7 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.7 /usr/bin/g++
Braiam
fuente
Cuando lo hice: ls -l gcc * cpp g ++ devolvió: ls: no se puede acceder a gcc *: No existe tal archivo o directorio ls: no se puede acceder a cpp: No existe dicho archivo o directorio ls: no se puede acceder a g ++: No
existe
No se requiere disculpa :) Una vez que llamo a la función remove funciona, pero cuando voy a crear "nuestros" enlaces simbólicos dice: sudo ln -s -T / usr / bin / cpp /usr/bin/cpp-4.8 ln: falló para crear un enlace simbólico `/usr/bin/cpp-4.8 ': El archivo existe
user997112
(Llamé al comando rm dos veces, así que la segunda vez confirmó / se quejó de que los enlaces existentes se habían eliminado)
user997112
3
Esta es una idea terrible . Hay muchos programas que utilizan gccpara compilar módulos del núcleo y algunos de ellos (por ejemplo, Nvidia) se bloquean silenciosamente cuando la gccllamada no será con la que se compiló el núcleo.
nbubis
1
@nbubis, la pregunta es "¿Cómo configuro mi instalación de g ++ 4.8 para que sea la g ++ predeterminada?" Por otro lado, ¿qué alternativa puedes proponer?
Braiam
16

Debe dejar update-alternativessaber que tiene 2 compiladores de C ++, crear un registro para cada uno y luego configurar cuál desea usar. Esto se hace con lo siguiente:

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6.3 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 40
sudo update-alternatives --config g++ 

De ahora en adelante, lo único que se requiere al cambiar de compilador es este comando:

sudo update-alternatives --config g++

Ver man update-alternativespara más información.

Fuente: ¿Cómo usar múltiples instancias de gcc?

Radu Rădeanu
fuente
@Braiam Se puede hacer de la misma manera con cualquier paquete.
Radu Rădeanu
3
¿Alguien puede dar más detalles sobre los años 60 y 40? He visto esto en muchos lugares
user997112
@ user997112 Le sugiero que lea al hombre, pero, si le gustan más 70 y 30, use 70 y 30 ...
Radu Rădeanu
1
@ user997112 estos son números de prioridad y solo son relevantes cuando se usa --auto. puedes ver algunos ejemplos usandoupdate-alternatives --display editor
Braiam
2
El 12.04 obtengo: update-alternative: error: alternativa g ++ no puede ser maestro: es esclavo de gcc
rickfoosusa
9

Esta es la gran descripción y las instrucciones paso a paso sobre cómo crear y administrar alternativas de maestro y esclavo (gcc y g ++).

En breve, es

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 
sudo update-alternatives --config gcc
Anton K
fuente
Bienvenido a Ask Ubuntu! Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Stormvirux
Tienes razón. Agregué la parte esencial
Anton K
1
Me salvó el día con esas cosas de esclavos. tx
Lennart Rolland