Esta questão parece ter sido resolvida adequadamente em várias perguntas e em outros lugares facilmente encontrados no Google, mas não acho a solução satisfatória pelos motivos explicados abaixo. Mas apenas para conclusão, incluí alguns links relevantes:
/ubuntu/138284/how-to-downgrade-a-package-via-apt-get /ubuntu/428772/how-to-install-specific-version-of -alguns-package / 428.778 /ubuntu/26498/choose-gcc-and-g-version ...
E outros.
No entanto, esta pergunta é sobre a instalação de uma versão muito específica do GCC no Kali Linux, que não parece prontamente disponível como um pacote específico. Em particular, a questão é sobre como instalar a versão 6.3.0, pois preciso dessa versão para compilar um programa específico: https://www.reddit.com/r/Monero/comments/6d0ah8/xmrig_miner_new_release/
(como uma pergunta bônus, se houver uma maneira mais sensata de corrigir esse problema em particular sem usar uma versão diferente do GCC, fique à vontade para responder, mas acredito que essa pergunta é geral e eu gostaria de saber como fazer isso independentemente de como fazer o link do programa mencionado corretamente)
As versões disponíveis para instalação de qualquer pacote, por exemplo, gcc, podem ser determinadas com:
apt-cache showpkg gcc
Que listará as versões disponíveis em "versões:", por exemplo
4:7.2.0-1d1
4:4.9.2-2
A instalação é tão simples quanto emitir
apt-get install gcc:4:4.9.2-2
Isso instalará a versão anterior 4: 4.9.2-2, simplesmente (acredito) substituindo a instalação 7.2.0-1d1, se presente.
Para obter a versão 4: 4.9.2-2 disponível, tive que adicionar deb
http://old.kali.org/kali sana main non-free contrib
ao meu
/etc/apt/sources.list
arquivo e, em seguida, executar apt-get update
.
No entanto, e se a versão necessária não estiver listada?
Eu tenho experimentado várias fontes, por exemplo, as encontradas aqui: http://snapshot.debian.org/ e em várias outras perguntas e sites das pesquisas do Google.
A maioria deles me ignora ou com erros, por exemplo, a seguir
Ign:3 http://snapshot.debian.org/archive/debian/20091004T111800Z lenny InRelease
Mesmo que isso funcione, parece ser uma abordagem muito ruim instalar uma versão específica, pois adicionar uma fonte arbitrária pode não ter a versão específica que eu quero.
Se eu procuro gcc no snapshot.debian.org, recebo apenas versões muito antigas: http://snapshot.debian.org/package/gcc/
Por fim, fiquei frustrado com essa abordagem e compilei o GCC 6.3.0 a partir do tarball de origem. A compilação foi bem-sucedida, mas depois me deparo com a instalação. Eu sou cauteloso sobre a execução make install
como eu temo que irá mexer com apt
e dpkg
e possivelmente quebrar o sistema.
Em vez disso, tentei executá-lo diretamente do diretório de compilação. Tentei simplesmente adicionar o diretório de compilação como a primeira entrada no meu PATH, o que não funcionou. Em seguida, tentei renomear /usr/bin/gcc
e fazer um link simbólico de /usr/bin/gcc
onde meu executável gcc-6.3.0 vive. Isso apresenta o seguinte problema:
cc: error trying to exec 'cc1': execvp: No such file or directory, which
Isso foi corrigido com outra entrada no meu PATH.
Então, eu recebo este erro:
/usr/include/stdio.h:34:21: fatal error: stddef.h: No such file or directory
O que eu assumo é por causa de uma entrada ausente /usr/lib/gcc/x86_64-linux-gnu
. Tentei fazer um link simbólico de 6 a 6.3.0, mas isso não foi suficiente. Eu também tentei copiar tudo com o cp -R
mesmo resultado.
Este deve ser um programa de 64 bits, mas também considerei o mesmo
/usr/lib/gcc/i686-linux-gnu
.
Tenho certeza de que poderia começar a fazer strace
para ver de onde ele tenta abrir os arquivos, ler os arquivos de log, ler a fonte e, eventualmente, imagino que seria capaz de descobrir como hackear uma solução mal concebida. Mas seria bom se alguém pudesse me dizer como fazer isso de maneira sã.
fonte
Respostas:
O GCC 6 está disponível no kali linux e pode ser instalado da seguinte forma:
Para alternar entre gcc6 e gcc7
saída de amostra:
Selecione sua
gcc
versão padrão .em 05/08/2017, a versão gcc-6 é atualizada de
6.3.0
para6.4.0
.Criando uma versão específica do gcc
6.3.0
Faça o download do tarball do espelho mais próximo : Versões do GCC
Adicionar
gcc-6.3
aupdate-alternatives
Importante : A
--disable-multilib
opção é necessária para configurar e criargcc
a arquitetura atual.GCC WIKI: instalando o GCC
fonte
6.3.0
, agora a versão do gcc6 foi atualizada para6.4.0
.Agora você deve clicar no que deseja e o download será iniciado.
Finalmente, você deve compilar e instalar a partir da fonte: /ubuntu/25961/how-do-i-install-a-tar-gz-or-tar-bz2-file
fonte
make install
pode adulterardpkg
ouapt
.. você pode elaborar! @AlphaCentauriSe você criou um padrão
./configure; make
sem passar nenhuma opçãoconfigure
,make install
colocará as partes da versão desejada do GCC em vários subdiretórios de/usr/local
.A
/usr/local
árvore de diretórios é destinada ao software instalado pelo administrador do sistema fora do sistema de gerenciamento de pacotes (ou seja, exatamente o que você está fazendo). Como tal, o software instalado não quebrará o software empacotado, exceto em circunstâncias extremamente incomuns.O GCC, em particular, foi desenvolvido com base no pressuposto de que você terá várias versões instaladas. Exige praticamente medidas ativas de sua parte para quebrar qualquer coisa (por exemplo, misturando e combinando peças para tentar criar uma versão híbrida).
fonte
configure
script (por exemplo, algumas-program-suffix=
etc) #Primeiro, eu recomendaria, se você compilar o GCC a partir da fonte, escolher uma versão mais recente (por exemplo, o GCC 7 no final de 2017).
Em seguida, certifique-se de criar o GCC fora de sua árvore de origem e tentar primeiro seu
configure
script com--help
e passar mais opções para eleconfigure
. Leia atentamente as instruções de instalação do GCC e entenda o papel do autoconf .Na prática, eu recomendo
execute
/usr/bin/gcc -v
para entender como o GCC do seu sistema foi configuradoexecutar
apt-get build-dep gcc-6
(ou similar) para obter as dependências recentes do GCC do sistemacrie um diretório de construção fora da sua árvore de origem do GCC e execute mais adiante
.../configure
(substitua...
pelo caminho relativo apropriado, por exemplo../gcc-7.2/
) emake
lá.você provavelmente deseja passar pelo menos
--program-suffix=-mine
para issoconfigure
(-mine
pode ser substituído por outro sufixo) e pode até adicionar--prefix=$HOME/soft/
se não tiver acesso root. Você provavelmente vai querer opções adicionais paraconfigure
e você precisa escolher e dar-lhes atenção.então um mais tarde
make install
(você pode até rodar sem ser rootmake install DESTDIR=/tmp/gccinst/
e depois copiar cuidadosa e recursivamente como root que/tmp/gccinst/
....) instalaria coisas em/usr/local/bin/gcc-mine
etc .... (ou$HOME/soft/bin/gcc-mine
....) para não quebrar nenhum arquivo instalado no sistema .Observe que o ESF exige que o sistema de gerenciamento de pacotes seja deixado em paz
/usr/local/
(que é o padrão--prefix
para os GCCsconfigure
)fonte
Você também pode usar uma cadeia de ferramentas pré-compilada ou essa para sua arquitetura específica (x86_64, glibc, gcc 6.3).
Obviamente, a próxima opção é usar o chamado rootfs-builder como buildroot ou yocto
para gerar uma cadeia de ferramentas com sua versão específica do gcc.
fonte