Come installare una versione specifica di GCC in Kali Linux?


8

Questa domanda sembra essere affrontata correttamente in diverse domande e in altri luoghi facilmente reperibili con Google, ma non trovo la soluzione soddisfacente per i motivi spiegati di seguito. Ma solo per completamento, ho incluso alcuni collegamenti rilevanti:

/ubuntu/138284/how-to-downgrade-a-package-via-apt-get /ubuntu/428772/how-to-install-specific-version-of -some-package / 428778 /ubuntu/26498/choose-gcc-and-g-version ...

E altri.

Tuttavia, questa domanda riguarda l'installazione di una versione molto specifica di GCC in Kali Linux, che non appare prontamente disponibile come pacchetto specifico. In particolare, la domanda riguarda come installare la versione 6.3.0, poiché ho bisogno di questa versione per compilare un determinato programma: https://www.reddit.com/r/Monero/comments/6d0ah8/xmrig_miner_new_release/

(come domanda bonus, se esiste un modo più sano di risolvere questo particolare problema senza utilizzare una versione diversa di GCC, sentiti libero di rispondere, ma credo che questa domanda sia generale e vorrei sapere come farlo indipendentemente da come effettuare correttamente il collegamento al programma sopra citato)

Le versioni disponibili per l'installazione di qualsiasi pacchetto, ad esempio gcc, possono essere determinate con:

apt-cache showpkg gcc

Che elencherà le versioni disponibili in "versioni:", ad es

4:7.2.0-1d1
4:4.9.2-2

L'installazione è quindi semplice come l'emissione

apt-get install gcc:4:4.9.2-2

Questo installerà la versione precedente 4: 4.9.2-2, semplicemente (credo) sovrascrivendo l'installazione 7.2.0-1d1, se presente.

Per ottenere la versione 4: 4.9.2-2 disponibile, ho dovuto aggiungere deb http://old.kali.org/kali sana main non-free contribal mio /etc/apt/sources.listfile ed eseguire apt-get update.

Tuttavia, cosa succede se la versione di cui ho bisogno non è elencata?

Ho sperimentato varie fonti, ad esempio quelle trovate qui: http://snapshot.debian.org/ e in varie altre domande e siti Web dalle ricerche di Google.

La maggior parte di loro mi dà ignorare o errori, ad esempio come segue

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

Anche se questo funzionasse, sembra essere un pessimo approccio per installare una versione particolare, poiché l'aggiunta di una fonte arbitraria potrebbe non avere la versione particolare che desidero.

Se cerco gcc su snapshot.debian.org, ottengo solo versioni molto vecchie: http://snapshot.debian.org/package/gcc/

Alla fine sono stato frustrato da questo approccio e ho compilato GCC 6.3.0 dal tarball di origine. La compilation ha avuto successo, ma poi mi trovo di fronte a come installarlo. Sono cauti in esecuzione make installcome temo che sarà manomettere apte dpkge possibilmente rompere il sistema.

Invece, ho provato a eseguirlo direttamente dalla directory di build. Ho provato ad aggiungere semplicemente la directory di build come prima voce nel mio PERCORSO, che non ha funzionato. Quindi, ho provato a rinominare /usr/bin/gcce fare un collegamento simbolico da /usr/bin/gccdove vive il mio eseguibile gcc-6.3.0. Questo presenta il seguente problema:

cc: error trying to exec 'cc1': execvp: No such file or directory, which

Questo è stato risolto con un'altra voce nel mio PERCORSO.

Quindi, ottengo questo errore:

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

Che presumo sia a causa di una voce mancante in /usr/lib/gcc/x86_64-linux-gnu. Ho provato a creare un collegamento simbolico dalla 6 alla 6.3.0, ma questo non era sufficiente. Ho anche provato a copiare tutto con lo cp -Rstesso risultato.

Questo dovrebbe essere un programma a 64 bit, ma ho anche considerato lo stesso per /usr/lib/gcc/i686-linux-gnu.

Sono sicuro che potrei iniziare stracea vedere da dove tenta di aprire i file, leggere i file di registro, leggere la fonte e alla fine immagino che sarei in grado di capire come hackerare insieme una soluzione mal concepita. Ma sarebbe bello se qualcuno potesse dirmi come fare in modo sano.


Ciò non toglie i meriti generali della tua domanda; ma le versioni attuali di XMRig dovrebbero funzionare bene con GCC 7, quindi dovresti essere in grado di costruirlo senza fare confusione con GCC 6.3.
Stephen Kitt,

Puoi sempre compilare GCC (qualsiasi versione non troppo antica) dal suo codice sorgente , poiché è un software gratuito. Fai attenzione quando lo configuri e costruiscilo al di fuori del suo albero dei sorgenti.
Basile Starynkevitch il

Risposte:


10

Come installare una versione specifica di GCC in Kali Linux?

GCC 6 è disponibile su Kali Linux può essere installato come segue:

apt install g++-6 gcc-6

Per alternare tra 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

uscita campione:

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:

Seleziona la gccversione predefinita .

il 05-08-2017 la versione gcc-6 viene aggiornata da 6.3.0a 6.4.0.

Installazione xmrigseguendo le istruzioni della build .

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

Costruire una versione specifica di gcc 6.3.0

Scarica il tarball dal mirror più vicino : GCC Releases

wget https://ftp.gnu.org/gnu/gcc/gcc-6.3.0/gcc-6.3.0.tar.bz2
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

Aggiungi gcc-6.3aupdate-alternatives

Importante : l' --disable-multilibopzione è necessaria per configurare e compilare gccper l'architettura corrente.

GCC WIKI: installazione di GCC


1
Perdonami, ma non installa questa versione di GCC fornita da "gcc-6"? E se volessi installare specificamente 6.3.0?
AlphaCentauri,

@AlphaCentauri 6 mesi fa è disponibile la versione gcc6 6.3.0, ora la versione gcc6 è stata aggiornata 6.4.0.
GAD3R,

1
La risposta di @AlphaCentauri è stata aggiornata includendo i passaggi dell'edificio.
GAD3R,

1
  1. Per prima cosa devi visitare questo sito Web: http://gcc.gnu.org/mirrors.html
  2. Quindi seleziona le versioni precedenti e vedrai diverse versioni.
  3. Ora dovresti fare clic su quello che vuoi avere e il download inizierà.

  4. Infine, devi compilare e installare dal sorgente: /ubuntu/25961/how-do-i-install-a-tar-gz-or-tar-bz2-file


1
Grazie, ma non credo che tu abbia letto tutta la mia domanda. Ho sottolineato come ho tentato di compilare dal sorgente. Il problema con questo (come sottolineato nella mia domanda), è che fare "make install" su GCC potrebbe non essere una buona idea in quanto potrebbe rompere il sistema. Inoltre, semplicemente eseguire GCC senza fare make install introduce le sue sfide, che ho anche delineato nella mia domanda originale.
AlphaCentauri,

Hai dichiarato nella tua domanda che make installpotrebbe manomettere dpkgo apt... puoi elaborare! @AlphaCentauri
Prashant Luhar

0

Se hai fatto uno standard ./configure; makesenza passare alcuna opzione a configure, allora make installinserirai i pezzi della versione desiderata di GCC in varie sottodirectory di /usr/local.

L' /usr/localalbero delle directory è destinato al software installato dall'amministratore di sistema al di fuori del sistema di gestione dei pacchetti (cioè esattamente quello che stai facendo). Pertanto, il software installato non romperà il software in pacchetto se non in circostanze estremamente insolite.

GCC in particolare è progettato in base al presupposto che avrai più versioni installate. Praticamente richiede misure attive da parte tua per rompere qualsiasi cosa (ad es. Mescolando e abbinando pezzi per provare a creare una versione ibrida).


Non dovresti (e probabilmente non riuscirai a) costruire GCC nel suo albero dei sorgenti. E probabilmente vuoi ulteriori opzioni al suo configurescript (ad esempio alcuni -program-suffix=ecc.)
Basile Starynkevitch,

0

Alla fine sono diventato frustrato da questo approccio e ho compilato GCC 6.3.0 dal tarball di origine. La compilation ha avuto successo,

In primo luogo, consiglierei, se compilate GCC dalla sua fonte, di scegliere una versione più recente (ad esempio GCC 7 alla fine del 2017).

Quindi, assicurati di creare GCC al di fuori del suo albero dei sorgenti e di provare prima il suo configurescript --helpe di passare più opzioni al suoconfigure . Leggere attentamente le istruzioni di installazione di GCC e comprendere il ruolo di autoconf .

In pratica, lo consiglio

  • corri /usr/bin/gcc -vper capire come è stato configurato il GCC del tuo sistema

  • eseguire apt-get build-dep gcc-6(o simile) per ottenere le dipendenze GCC del sistema recente

  • creare una directory di build all'esterno dell'albero dei sorgenti di GCC ed eseguirla ulteriormente .../configure(sostituirla ...con un percorso relativo appropriato, ad es. ../gcc-7.2/) e makelì.

  • probabilmente vorrai passare almeno --program-suffix=-minea quello configure( -minepuò essere sostituito da un altro suffisso) e potresti anche aggiungere --prefix=$HOME/soft/se non hai accesso root. Probabilmente si vorrà opzioni aggiuntive a configureed è necessario scegliere e dare loro cura.

  • quindi un successivo make install(potresti anche eseguire senza essere root make install DESTDIR=/tmp/gccinst/e successivamente copiarlo attentamente e ricorsivamente come root che /tmp/gccinst/....) installerebbe le cose in /usr/local/bin/gcc-mineetc .... (o $HOME/soft/bin/gcc-mine....) in modo da non rompere i file installati dal sistema .

Si noti che l' FHS richiede che il sistema di gestione dei pacchetti lasci da solo /usr/local/(che è l'impostazione predefinita --prefixper GCC configure)


L'OP ha già GCC 7, ma stava cercando 6.3.0 a seguito di un commento reddit errato.
Stephen Kitt,

0

Puoi anche usare una toolchain precompilata o questa per la tua architettura specifica (x86_64, glibc, gcc 6.3).

Ovviamente la prossima opzione è usare un cosiddetto rootfs-builder come buildroot o yocto
per generare una toolchain con la tua specifica versione di gcc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.