Então eu instalei o gcc-4.4 e o gcc-4.3 (o mesmo para o g ++). Agora, tanto quanto me lembro, existe uma ferramenta no Ubuntu que define os links simbólicos para você, se você apenas disser qual versão deseja. No entanto, ele não parece funcionar na versão mais recente, o que acho 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
Alguma ideia?
Respostas:
Primeiro, apagou a configuração atual de alternativas de atualização para gcc e g ++:
Instalar pacotes
Parece que o gcc-4.3 e o gcc-4.4 são instalados após a instalação essencial da compilação. No entanto, podemos instalar explicitamente os seguintes pacotes:
Instalar alternativas
Os links simbólicos cc e c ++ são instalados por padrão. Instalaremos links de símbolos para gcc e g ++ e, em seguida, vincularemos cc e c ++ a gcc e g ++, respectivamente. (Note que a
10
,20
e30
as opções são as prioridades para cada alternativa.)Configurar alternativas
A última etapa é configurar os comandos padrão para gcc, g ++. É fácil alternar entre 4,3 e 4,4 interativamente:
Ou alterne usando o script:
fonte
executar no terminal:
Ok, então essa parte é bastante simples. A parte complicada é que, quando você emite o comando GCC, na verdade é um link simbólico para qualquer versão do GCC em uso. O que isso significa é que podemos criar um link simbólico do GCC para a versão que desejamos.
fonte
Isso é realmente desejável? Existem alterações ABI entre
gcc
versões. Compilar algo com uma versão (por exemplo, todo o sistema operacional) e, em seguida, compilar algo com outra versão, pode causar conflito.Por exemplo, os módulos do kernel devem sempre ser compilados com a mesma versão
gcc
usada para compilar o kernel. Com isso em mente, se você alterou manualmente o link simbólico entre/usr/bin/gcc
e a versão usada na sua versão do Ubuntu, futuros módulos criados pelo DKMS podem usar agcc
versão errada .Se você apenas deseja criar coisas com uma versão diferente
gcc
, isso é fácil, mesmo com makecripts. Por exemplo, você pode passar na versão dogcc
naCC
variável de ambiente:Você pode não precisar dele no comando make (os scripts de configuração geralmente o puxam), mas não faz mal.
fonte
gcc
não faz parte doalternatives
sistema e por que isso não é particularmente desejável. Se nenhum deles mudar de idéia, faça-o manualmente.$ sudo apt-get install gcc-6 gcc-7 $ CC="gcc-7" ./configure <much output> $ make # uses gcc-7
Considerandosudo update-alternatives gcc gcc-7
que teria garantido que você não alternasse acidentalmente as ABIs.Editar:
Isso pressupõe que você instalou a versão primeiro, com, por exemplo:
Original:
E aqui está uma linha para quem é preguiçoso, basta alterar, alterar o número no final para a versão desejada. Ele fará a alteração para gcc e / ou g ++
Neste exemplo, mudei para 4.9
Não há verificações de erro e o que não está neste exemplo; portanto, convém verificar o que será executado antes de executá-lo. Basta adicionar eco antes do sudo . Para completar, também forneço linha de verificação:
A saída da verificação deve ser algo como:
Você pode verificar a versão depois com:
Explicação semi-detalhada:
fonte
Que tal um link simbólico em um diretório temporário:
mkdir x && PATH=$PWD/x:$PATH && ln -s /usr/bin/g++-7 $PWD/x/g++
fonte