Como instalar uma versão específica do GCC no Kali Linux?

6

Esta questão parece ser tratada adequadamente em várias questões e outras lugares facilmente encontrados com o Google, mas não acho a solução satisfatória pelas razões explicadas abaixo. Mas apenas para conclusão, incluí alguns links relevantes:

link link link ...

E outros.

No entanto, esta questão é sobre a instalação de uma versão muito específica do GCC no Kali Linux, que não aparece prontamente disponível como um pacote específico. Em particular, a questão é sobre como instalar a versão 6.3.0, já que eu preciso desta versão para compilar um programa em particular: link

(como uma questão bônus, se houver uma maneira mais sensata de corrigir esse problema problema sem usar uma versão diferente do GCC, sinta-se à vontade para responder, mas acredito que esta pergunta é geral e gostaria de saber como fazê-lo independentemente de como fazer corretamente o link do programa mencionado acima)

As versões que estão disponíveis para instalação de qualquer pacote, por ex. gcc, pode ser determinado 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 a edição

apt-get install gcc:4:4.9.2-2

Isto irá instalar a versão mais antiga 4: 4.9.2-2, simplesmente (acredito) sobrescrevendo 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 file e, em seguida, execute apt-get update .

No entanto, e se a versão de que preciso não estiver listada?

Eu tenho experimentado com várias fontes, por exemplo aqueles encontrados aqui: link e em várias outras perguntas e sites das pesquisas do Google.

A maioria deles me ignora ou com erros, por exemplo como segue

Ign:3 http://snapshot.debian.org/archive/debian/20091004T111800Z lenny InRelease

Mesmo que isso funcione, parece ser uma abordagem muito ruim para obter um uma determinada versão instalada, já que adicionar alguma fonte arbitrária pode não ter a versão específica que eu quero.

Se eu pesquisar em snapshot.debian.org para o gcc, eu só obtenho versões muito antigas: link

Eu acabei me frustrando 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 forma de instalá-lo. Estou cauteloso sobre a execução de make install , já que temo que ele interfira com apt e dpkg e, possivelmente, quebre o sistema.

Em vez disso, tentei executá-lo diretamente no diretório de criação. Eu tentei simplesmente adicionar o diretório de compilação como a primeira entrada no meu PATH, o que não funcionou. Então, tentei renomear /usr/bin/gcc e fazer um link simbólico de /usr/bin/gcc para onde meu executável do gcc-6.3.0 mora. 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, recebo este erro:

/usr/include/stdio.h:34:21: fatal error: stddef.h: No such file or directory

O que eu suponho é devido a uma entrada ausente em /usr/lib/gcc/x86_64-linux-gnu . Eu tentei fazer um link simbólico de 6 para 6.3.0, mas isso não foi suficiente. Eu também tentei copiar tudo com 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 tenta abrir os arquivos, ler arquivos de log, ler a fonte e, eventualmente, imaginar que seria capaz de descobrir como hackear um solução mal concebida. Mas seria bom se alguém pudesse me dizer como fazer isso de uma maneira sã.

    
por AlphaCentauri 13.12.2017 / 20:34

4 respostas

7

How to install a specific version of GCC in Kali Linux?

O GCC 6 está disponível no kali linux e pode ser instalado da seguinte forma:

apt install g++-6 gcc-6

Para alternar entre gcc6 e gcc7

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 1 --slave /usr/bin/g++ g++ /usr/bin/g++-7
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 2 --slave /usr/bin/g++ g++ /usr/bin/g++-6
update-alternatives --config gcc

exemplo de saída:

There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path            Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-6   2         auto mode
  1            /usr/bin/gcc-6   2         manual mode
  2            /usr/bin/gcc-7   1         manual mode

Press <enter> to keep the current choice[*], or type selection number:

Selecione sua versão gcc padrão.

em 2017-08-05, a versão do gcc-6 é atualizada de 6.3.0 para 6.4.0 .

Installing xmrig following the build's instructions.

apt-get install git build-essential cmake libuv1-dev libmicrohttpd-dev
git clone https://github.com/xmrig/xmrig.git
cd xmrig
mkdir build
cd build
cmake ..
make

Criando uma versão específica do gcc 6.3.0

Faça o download do tarball no espelho mais próximo: Lançamentos do GCC

wget http://gcc.parentingamerica.com/releases/gcc-6.3.0/gcc-6.3.0.tar.gz
tar xvf gcc-6.3.0.tar.gz
cd gcc-6.3.0
apt build-dep gcc
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-6.3.0/configure --prefix=/usr/bin/gcc-6.3 --enable-languages=c,c++,fortran,go --disable-multilib
make -j 8
make install

Adicione gcc-6.3 a update-alternatives

Importante : a opção --disable-multilib é necessária para configurar e criar gcc para a arquitetura atual.

GCC WIKI: Instalando o GCC

    
por 14.12.2017 / 14:11
1
  1. Primeiro, você precisa acessar este site: link
  2. Em seguida, selecione versões antigas e você verá versões diferentes.
  3. Agora você deve clicar no que você deseja ter e o download será iniciado.

  4. Finalmente, você tem que compilar e instalar a partir da fonte: link

por 14.12.2017 / 02:24
0

Se você fez um ./configure; make padrão sem passar nenhuma opção para configure , então make install colocará as partes da sua versão desejada do GCC em vários subdiretórios de /usr/local .

A árvore de diretórios /usr/local é 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 interromperá o software empacotado, exceto em circunstâncias extremamente incomuns.

O GCC, em particular, é projetado com base na suposição de que você terá várias versões instaladas. Ele praticamente requer medidas ativas de sua parte para quebrar qualquer coisa (por exemplo, misturando e combinando peças para tentar criar uma versão híbrida).

    
por 15.12.2017 / 00:00
0

I eventually became frustrated with this approach and compiled GCC 6.3.0 from the source tarball. The compilation was successful,

Primeiramente, eu recomendo, se você compilar o GCC de sua fonte, para escolher uma versão mais recente (por exemplo, GCC 7 no final de 2017).

Depois, crie o GCC fora de sua árvore de origem e tente primeiro o script configure com --help e passe mais opções ao seu configure . Leia cuidadosamente as instruções instalação do GCC e entenda o papel de autoconf .

Na prática, recomendo

  • execute /usr/bin/gcc -v para entender como o GCC do seu sistema foi configurado

  • execute apt-get build-dep gcc-6 (ou similar) para obter as dependências do GCC do sistema recente

  • crie um diretório de criação fora de sua árvore de origem do GCC e execute mais .../configure (substitua ... pelo caminho relativo apropriado, por exemplo, ../gcc-7.2/ ) e make .

  • você provavelmente deseja passar pelo menos --program-suffix=-mine para esse configure (o -mine pode ser substituído por outro sufixo) e você pode até mesmo adicionar --prefix=$HOME/soft/ se você não tiver acesso root. Você provavelmente vai querer opções adicionais para configure e você precisa escolher e dar-lhes cuidadosamente.

  • depois um make install (você pode até rodar sem ser root make install DESTDIR=/tmp/gccinst/ e depois copiar cuidadosamente e recursivamente como root que /tmp/gccinst/ ....) instalaria coisas em /usr/local/bin/gcc-mine etc. .. (ou $HOME/soft/bin/gcc-mine ....) por isso não vai quebrar nenhum arquivo instalado no sistema.

Observe que o FHS exige que o sistema de gerenciamento de pacotes deixe apenas /usr/local/ (que é o padrão --prefix para configure do GCC)

    
por 15.12.2017 / 10:36