Obtendo + instalando o gcc / g ++ 4.9 no Ubuntu? [duplicado]

77

Como instalo a versão mais recente do gcc e g ++?

Estou usando vários recursos C ++ 11 e C ++ 1y; e é por isso que eu preciso disso.

    
por A T 02.03.2014 / 04:05

7 respostas

107

Você pode instalar uma versão próxima do upstream do GCC no Ubuntu Toolchain PPA: link

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

Testado no Ubuntu 14.04.

    
por Vladimir Rutsky 28.04.2014 / 10:14
41

Introdução

ensinar um homem a pescar etc. etc.

Como criar o pacote de origem e servi-lo a partir de um repositório local de uma maneira apropriada para o apt. Isso funcionará em qualquer distribuição, desde que as dependências possam ser satisfeitas / Este método não requer que você instale o build-deps para cada pacote e polua sua máquina com pacotes estranhos, isso permitirá que você acompanhe os pacotes conforme eles são atualizados no debian experimental . Leva apenas alguns minutos para fazer isso uma vez, e então pode ser reutilizado para reconstruir qualquer pacote que você precise sem depender de outras pessoas para empacotar o ppa para você ou baixar um monte de arquivos diferentes .debs

O benefício de construir vs. extrair o .debs raw do debian é que isto irá construir pacotes contra os pacotes em sua distribuição, que podem diferir na versão / revisão do que é usado como dependências de compilação para a distribuição debian. Este é mais ou menos o processo de backporting de pacotes. Você também pode usar qualquer distribuição do ubuntu para construir pacotes direcionados a qualquer outra distribuição (o destino, neste caso, significa construir contra os pacotes de repositório padrão) sem problemas.

Básico-How-to-Build-a-deb

(não para upload de ppa - isso tem requisitos beurocráticos do launchpad

Provavelmente necessário: packaging-dev (extrai build-essential pubilder ubuntu-dev-tools entre outros)

  1. Configure o pbuilder (isso permite que você construa um pacote em um chroot sem poluir seu sistema com pacotes de dependência de compilação)

    • sudo pbuilder create ,
    • se você deseja criar uma distribuição específica, (o pbuilder usa a versão do sistema de compilação em um chroot) você pode usar pbuilder-dist [precise/oneric/trusy/etc...] create
  2. Obtenha a origem do debian

    • A revisão debian específica de pull-debian-source gcc-4.9 [4.9.0-6] é opcional, mas pode ser útil se você quiser extrair revisões estáveis / instáveis / de teste / estáveis
    • você também pode extrair de distros específicas do ubuntu adicionando-as a sources.list como deb-src e usando sudo apt-get src
  3. Criar pacote

    • sudo pbuilder build gcc-4.9_4.9.0-6.dsc
    • Nos arquivos baixados há um arquivo .dsc , para o gcc mais recente é gcc-4.9_4.9.0-6.dsc , que é um arquivo descritor de pacote. .orig.tar.[gz/xz] é o tarball de origem.
  4. Crie um repositório Apt local

    • mkdir /convenient/place/for/repo
    • cp /var/cache/pbuilder/result/* /path/to/repo
    • (supondo que você esteja no diretório repo) apt-ftp archive packages . > Packages
    • (uma das muitas maneiras de fazer isso) sudo echo "deb [trusted=yes] file:/local/repo/Packages ./" > /etc/apt/sources.list.d/gcc-repo.list
    • Note que você também pode fazer este passo com .debs baixados de qualquer lugar (pule as etapas 1-3)
  5. Instalar

    • apt-get update; apt-get install gcc-4.9 g++-4.9

Truques extras

Dependências fáceis de backporting

Usando pacotes auto-compilados para satisfazer dependências ao criar pacotes. (Eu configurei com as pastas ~/pbuilder ~/pbuilder/precise_local (repositório de pacotes locais para precisão) e ~/pbuilder/precise_hooks (para scripts de hooks))

Adicione o seguinte ao seu ~/.pbuilderrc

OTHERMIRROR="deb [trusted=yes] file:///home/user/pbuilder/precise_local ./"

BINDMOUNTS="/home/user/pbuilder/precise_local" 

HOOKDIR="/home/user/pbuilder/precise_hooks"

EXTRAPACKAGES="apt-utils"

em precise_hooks crie um arquivo D05local (na forma típica de unix / linux, o prefixo D informa quando o script está viciado 05 é auto-imposto por ordem de nomes e local é apenas o nome, se você só tem um gancho não é importante o que é chamado desde que D seja o prefixo

o script é um verso

(cd /home/user/pbuilder/precise_local ; apt-ftparchive packages . > Packages)

Agora, todos os pacotes colocados em precise_local satisfarão as dependências de construção. Isso é extremamente útil para construir uma árvore de dependência localmente ao fazer o back-port de pacotes que possuem dependências que também precisam de backporting

A solução da VM

Para fazer isso de uma maneira ainda mais limpa, use uma imagem de VM ou um contêiner LXC para prender essa bagunça.

Aplicando patches personalizados

você pode aplicar patches personalizados na maioria dos pacotes debian usando quilt , patches de quilt podem usar diffs da maioria dos VCSs (veja: usando o quilt )

Há uma etapa adicional, você deve reconstruir .dsc e .debian.tar.gz . A maneira mais limpa que eu sei é bzr-builddeb tem a taxa de sucesso mais alta IMHO (comparado com o git-build-package e outros scripts auxiliares) e é muito mais limpa do que chamar debuild diretamente ( bzr = bazar canonical's VCS)

  1. sudo apt-get install bzr-builddeb
  2. (assumindo que .orig.tar.gz é extraído e .debian.tar.gz é extraído e coloque nele
    • bzr init
    • bzr add
    • bzr commit
  3. (OPCIONAL)
    • modificar debian/changelog
    • adicione patch a debian/patches/ e modifique debian/patches/series (o quilt também tem utilidade para adicionar patches ou para você modificar em tempo real, consulte a documentação)
    • bzr add debian/
    • bzr commit
  4. bzr builddeb -- -S -us -uc Isso reconstrói o arquivo de origem e o deixa não assinado (assinatura de gpg necessária para upload de PPA / distro, mas não para repositórios locais privados)
  5. cd ../build-area/ Continue na etapa 3 acima.

Os passos 1-4 aqui são basicamente o que você precisa fazer o upload para um PPA (eles não pegam arquivos binários), mas você precisa de alguns passos para satisfazer a burocracia do launchpad (este resposta fornece uma explicação, esta tem alguns links)     

por crasic 12.06.2014 / 18:03
26

instale

sudo su -
apt-get install build-essential
add-apt-repository ppa:ubuntu-toolchain-r/test
apt-get update
apt-get install gcc-4.9 g++-4.9 cpp-4.9

depois disso, se você verificar a versão do gcc, você encontrará a versão antiga

gcc --version

para que possamos corrigi-lo com um simples símbolo

cd /usr/bin
rm gcc g++ cpp
ln -s gcc-4.9 gcc
ln -s g++-4.9 g++
ln -s cpp-4.9 cpp

ou

você pode atualizar usando update-alternatives

// Na verdade eu tentei o simbólico & amp; Eu sei que isso vai funcionar, mas você pode usar o simbólico para obtê-lo sem problemas // por favor me corrija se eu estiver errado

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 40 --slave /usr/bin/gcc gcc /usr/bin/gcc-4.9
update-alternatives --config gcc
update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-4.9 40 --slave /usr/bin/cpp cpp /usr/bin/cpp-4.9
update-alternatives --config cpp
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9
update-alternatives --config g++

ou

você pode simplesmente compilar com
/usr/bin/gcc4.9 filename.c

gcc-4.9 é como o gcc-4.8 "ubuntu 14.04 gcc" não é uma grande deferência

    
por hwez 05.08.2014 / 10:27
8

O Debian oferece um pacote: link - Para evitar causar problemas com a compatibilidade do Ubuntu / Debian; não adicioná-lo ao seu sources.list.

Em vez disso, basta fazer o download de todos estes:

binutils_2.25-5_amd64.deb
cpp_4.9.2-2_amd64.deb
g++_4.9.2-2_amd64.deb
gcc_4.9.2-2_amd64.deb
gcc-4.9-base_4.9.2-10_amd64.deb
libasan1_4.9.2-10_amd64.deb
libatomic1_4.9.2-10_amd64.deb
libcilkrts5_4.9.2-10_amd64.deb
libgcc1_4.9.2-10_amd64.deb
libgcc-4.9-dev_4.9.2-10_amd64.deb
libgomp1_4.9.2-10_amd64.deb
libitm1_4.9.2-10_amd64.deb
liblsan0_4.9.2-10_amd64.deb 
libmpfr4_3.1.2-2_amd64.deb
libquadmath0_4.9.2-10_amd64.deb
libstdc++-4.9-dev_4.9.2-10_amd64.deb
libstdc++6
libtsan0_4.9.2-10_amd64.deb
libubsan0_4.9.2-10_amd64.deb

Dos servidores da Debian, por exemplo:

link

Em seguida, instale-os, por exemplo: $ for package in *.deb; do sudo dpkg --install "$package"; done

[Mais fácil apenas executar esse loop bash algumas vezes até que todas as dependências estejam cobertas do que lembrar a ordem em que você as baixou!]

    
por A T 02.03.2014 / 04:05
2

Atualmente (20141102) adicionando o PPA e invocando o comando acima, apt-get install gcc-4.9 g++-4.9 cpp-4.9 imprimirá uma grande quantidade de pacotes sugeridos. Instale todos eles, exceto o libvtv0-dbg (que possui um conflito de dependência):

apt-get install gcc-4.9 g++-4.9 cpp-4.9 gcc-4.9-locales g++-4.9-multilib libstdc++6-4.9-dbg gcc-4.9-multilib libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan1-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libquadmath0-dbg lib32stdc++6-4.9-dbg libx32stdc++6-4.9-dbg

(ignore os pacotes -dbg se eles não forem de seu interesse) e, em seguida, faça um apt-get dist-upgrade --auto-remove . Essa última etapa basicamente substituirá seu gcc-4.8 pelo gcc-4.9 (mas não irá desinstalar a versão mais antiga), e puxará compiladores fortran atualizados ao mesmo tempo.

    
por RJVB 02.11.2014 / 20:09
2

Eu tive que forçar a versão para o pacote gcc-4.9-base para passar a mensagem de erro que você postou. Então a instalação funcionou

sudo apt-get install gcc-4.9-base=4.9.2-0ubuntu1~14.04

Agora você pode fazer o regular

sudo apt-get install gcc-4.9
    
por mark.kedzierski 13.04.2015 / 18:51
2

Instale o GNU GNU 4.9

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

sudo apt-get update

sudo apt-get install gcc-4.9

Remove a versão anterior do gcc da lista de aplicativos padrão (se já existir)

sudo update-alternatives --remove-all gcc

Tornar o GCC 4.9 o compilador padrão no sistema

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20

sudo update-alternatives --config gcc

A atualização mais recente GCC 4.9.1 é uma versão de correção de bugs do GCC 4.9, contendo correções importantes para regressões e bugs sérios no GCC 4.9.0, com mais de 88 bugs corrigidos desde o lançamento anterior. Além disso, a versão GCC 4.9.1 suporta o OpenMP 4.0 também em Fortran, em vez de apenas em C e C ++

Nota: Verificado no Ubuntu 14.04 LTS

    
por Swap L 25.08.2015 / 07:56