Así que instalé gcc-4.4 y gcc-4.3 (lo mismo para g ++). Ahora, hasta donde recuerdo, hay una herramienta en Ubuntu que establece los enlaces simbólicos para usted si solo le dice qué versión desea. Sin embargo, no parece funcionar en la versión más reciente, lo que me parece decepcionante.
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
¿Algunas ideas?
Respuestas:
Primero borró la configuración actual de alternativas de actualización para gcc y g ++:
Instalar paquetes
Parece que tanto gcc-4.3 como gcc-4.4 se instalan después de instalar build-essential. Sin embargo, podemos instalar explícitamente los siguientes paquetes:
Instalar alternativas
Los enlaces simbólicos cc y c ++ se instalan por defecto. Instalaremos enlaces de símbolos para gcc y g ++, luego uniremos cc y c ++ a gcc y g ++ respectivamente. (Tenga en cuenta que las opciones
10
,20
y30
son las prioridades para cada alternativa).Configurar alternativas
El último paso es configurar los comandos predeterminados para gcc, g ++. Es fácil cambiar entre 4.3 y 4.4 de forma interactiva:
O cambie usando script:
fuente
ejecutar en terminal:
Bien, esa parte es bastante simple. La parte difícil es que cuando emite el comando GCC, en realidad es un enlace simbólico a cualquier versión de GCC que esté utilizando. Lo que esto significa es que podemos crear un enlace simbólico de GCC a la versión de GCC que queramos.
fuente
¿Es esto realmente deseable? Hay cambios ABI entre
gcc
versiones. Compilar algo con una versión (por ejemplo, todo el sistema operativo) y luego compilar algo más con otra versión, puede causar conflictos.Por ejemplo, los módulos del kernel siempre deben compilarse con la misma versión
gcc
utilizada para compilar el kernel. Con eso en mente, si modifica manualmente el enlace simbólico entre/usr/bin/gcc
y la versión utilizada en su versión de Ubuntu, los futuros módulos construidos con DKMS podrían usar lagcc
versión incorrecta .Si solo quiere construir cosas con una versión diferente de
gcc
, eso es bastante fácil, incluso con makecripts. Por ejemplo, puede pasar la versión degcc
en laCC
variable de entorno:Es posible que no lo necesite en el comando make (los scripts de configuración generalmente lo activan) pero no duele.
fuente
gcc
no es parte delalternatives
sistema y por qué esto no es particularmente deseable. Si ninguno de los dos va a cambiar de opinión, simplemente hágalo manualmente.$ sudo apt-get install gcc-6 gcc-7 $ CC="gcc-7" ./configure <much output> $ make # uses gcc-7
Mientras quesudo update-alternatives gcc gcc-7
se habría asegurado de que no cambie accidentalmente ABI.Editar:
Esto supone que ha instalado la versión primero, por ejemplo, con:
Original:
Y aquí hay una frase para aquellos que son flojos, solo cambie, cambie el número al final a la versión que desee. Hará el cambio para gcc y / o g ++
En este ejemplo, cambié a 4.9
No hay comprobaciones de errores y qué no en este ejemplo, por lo que es posible que desee comprobar qué se ejecutará antes de ejecutarlo. Solo agrega echo antes de sudo . Para completar, también proporciono una línea de verificación:
El resultado de la verificación debería ser algo como:
Puede verificar la versión después con:
Explicación semi detallada:
fuente
¿Qué tal un enlace simbólico en un directorio temporal:
mkdir x && PATH=$PWD/x:$PATH && ln -s /usr/bin/g++-7 $PWD/x/g++
fuente