Como instalar o GCC 5 no debian jessie 8.1

21

Eu tentei muitas soluções para instalar a atualização para o meu compilador gcc no servidor debian. Nenhum deles funcionou. Preciso da atualização do compilador para usar os novos recursos do c ++ 11, pois isso fornece uma libcxx11 ABI estável e suporte estável ao C ++ 11 (consulte aqui ). Obtendo especificamente a versão `GLIBCXX_3.4.21 'que não está incluída no meu compilador atual, versão gcc 4.9.2 (Debian 4.9.2-10).

Alguns indicadores para a solução serão úteis. Desde já, obrigado.

Alguns links para o fórum relacionados ao meu problema que eu já tentei:

1 2 3 (a solução não totalmente relacionada é para o ubuntu, mas ainda não consegui encontrar o gcc-5 no servidor ftp do debian)

mluthra
fonte
Isso é fornecido no Debian / testing e, como você vê, envolve mudanças nas bibliotecas de tempo de execução. Alguém pode aconselhá-lo como fazer isso como um pacote Debian, mas o efeito seria um pouco diferente da mudança para a configuração de teste devido ao grande número de pacotes afetados.
Thomas Dickey
Por que você precisa especificamente do novo suporte da ABI ? Você pode criar a maior parte do código C ++ 11 com o gcc 4.9.2 do Debian 8; você só precisará recompilar quando o Debian 9 for lançado. Se você não puder esperar, a solução mais fácil seria mudar para testing, mas provavelmente não é uma boa idéia em um servidor (dependendo do que você quer dizer com servidor, é claro). A mudança do gcc 4.9 para o gcc 5 envolveu uma transição de biblioteca; portanto, você terá um mundo de dor se tentar fazer isso sozinho!
Stephen Kitt
Eu concordo com o que thomas e stephen dizem, exceto que estou muito menos preocupado com a idéia de usar testes em um servidor. Nem todos os servidores exigem uma identidade de binários e bibliotecas de longo prazo (que é o que "estável" significa no contexto debian), pois alguns servidores que rastreiam testes ou mesmo instáveis ​​são mais úteis (se, por exemplo, são necessários recursos avançados, ou apenas manter-se à frente das crianças do script). No entanto, executar testes / instável em servidores de produção exige muita habilidade e conhecimento sobre o Debian para corrigir falhas ocasionais. Teste as atualizações em outras máquinas ou VMs primeiro.
cas 23/05
@cas Eu não estava pensando na estabilidade dos binários, mas nas duas principais desvantagens testing(usadas por conta própria): os pacotes às vezes são removidos temporariamente (portanto, a instalação que você acabou de validar na sua VM de teste pode não estar mais disponível facilmente) , e as correções de segurança podem ser atrasadas (às vezes por muito tempo, se testingestiver passando por uma grande transição de biblioteca, embora exista testing-securitynesses casos).
Stephen Kitt
1
Se você recompilar seu programa no sistema Debian (em vez de copiá-lo), ele deve funcionar bem.
Stephen Kitt

Respostas:

13

Eu precisava do GCC 5+ instalado no debian jessie e, como está disponível para testes do debian (pelo menos em 16 de junho), você pode usar o apt-pinning para instalar pacotes disponíveis lá (consulte https://wiki.debian.org/AptPreferences ) .

Para instalar o GCC 5+ dos testes no debian jessie usando o apt-pinning:

  1. Adicione o repositório debian testing às suas fontes apt, criando um arquivo no diretório que /etc/apt/sources.list.dcontém a linha

    deb http://ftp.us.debian.org/debian testing main contrib non-free

  2. Instrua o debian a usar fontes de teste em certos pacotes, criando um arquivo /etc/apt/preferences.dcontendo o seguinte:

    Package: *
    Pin: release a=testing
    Pin-Priority: 100
    
  3. Atualize o banco de dados apt: sudo apt-get update

  4. Instale o gcc a partir do teste: sudo apt-get install -t testing gcc

    Note que usar -t testingo comando apt-get para instalar o gcc a partir de fontes de teste como configurado anteriormente.

Eu sugiro fortemente limpar qualquer compilação e recompilar qualquer dependência antes de compilar suas fontes novamente.

Diverta-se!

llekn
fonte
1
Eu nunca tentei isso (nem desejo tentar), mas seu procedimento é interessante. Não há muitos pacotes de software tão intimamente ligados e integrados a todo o sistema Debian quanto o GCC. Seu procedimento realmente funciona? Ou causa mais problemas do que resolve? Curioso.
THB
1
Na verdade, eu tentei com bons resultados: consegui compilar com êxito o que estava construindo e o sistema continuou funcionando sem problemas.No entanto, você pode estar certo: alterar a versão do GCC pode interromper a compilação de outros pacotes (ou seja, compilar fontes ao instalar pacotes com pip) , mas acho que esse procedimento é o menos invasivo, pois aptacompanharia quais pacotes dependem do GCC e instalará versões compatíveis conforme necessário (tanto quanto me lembro).
llekn
2
Nota para a etapa 2: O arquivo em /etc/apt/preferences.d/ não deve conter um ponto "." no nome do arquivo ou termine em ".pref". Caso contrário, este arquivo será ignorado. Uma explicação do significado do valor 100 e por que ele foi escolhido seria apreciada.
22416 Ludwig Schulze
Pelo que entendi, quanto mais Pin-Priorityum pacote obtiver, maior será a preferência sobre outros pacotes com um número menor. Assim, como nos estados da página AptPrefences do Debian , testingpor padrão, faz com Pin-Priority: 900que todos os pacotes testingsejam instalados por padrão. Então, especificando que testingterá um Pin-Priority: 100abaixa testingpacotes prioridade tornando-os apenas instalável se solicitado ao especificar o alvo aapt-get install -t testing ...
llekn
1
@ LeeK-B De fato, o uso de Package: gccatualizações de todo o sistema para testes. A documentação sobre apt-prefencesé confusa, portanto, suponho que seja o que está acontecendo: 1: Como os pacotes do teste têm versões maiores, por padrão eles têm precedência sobre os padrões 2: Especificando o pacote: gcccom Pin-priority: 100faz com que todos os pacotes do teste tenham prioridade padrão (maior que padrão), exceto gcc. Exatamente o oposto que queríamos. Eu atualizei a resposta para evitar este erro
llekn
6

Para combinar as 2 respostas anteriores em uma que funcione:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" >> /etc/apt/sources.list.d/unstable.list
apt-get update
apt-get install -t unstable gcc-5

MAS!!! Use isso por seu próprio risco, pois você está instalando pacotes da instável. Você também pode remover /etc/apt/sources.list.d/unstable.listdepois de instalar os pacotes.

Se possível, instale no Docker para não atrapalhar seu sistema operacional. Sua milhagem pode variar.

johndodo
fonte
4

Desde 19/02/2017, o gcc-5 foi removido dos testes:

https://tracker.debian.org/pkg/gcc-5

Você pode, apt-get install gcc-5se você primeiro executar esta linha como root:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" > /etc/apt/sources.list.d/unstable.list

Então, você provavelmente desejará alterar a prioridade dessa fonte de /etc/apt/preferences.dacordo com a resposta de llekn.

nachoparker
fonte
1

Eu estava tendo problemas na semana passada; parece que a partir de 2019-01-23 o gcc-5 foi removido completamente dos repositórios. (Veja https://tracker.debian.org/pkg/gcc-5 )

Se você realmente precisar, suponho que você possa compilá-lo da fonte. Vou encontrar uma maneira de eliminar a dependência do meu sistema.

JDong
fonte