Come installare GCC 5 su debian jessie 8.1


21

Ho provato molte soluzioni per installare l'aggiornamento per il mio compilatore gcc sul server debian. Nessuno di loro ha funzionato. Ho bisogno dell'aggiornamento del compilatore per utilizzare le nuove funzionalità di c ++ 11, poiché ciò fornisce un ABI libcxx11 stabile e un supporto stabile per C ++ 11 (fare riferimento qui ). In particolare ottenere la versione `GLIBCXX_3.4.21 'che non è inclusa nel mio attuale compilatore gcc versione 4.9.2 (Debian 4.9.2-10).

Alcuni suggerimenti per la soluzione saranno utili. Grazie in anticipo.

Alcuni link al forum relativi al mio problema che ho già provato:

1 2 3 (la soluzione non interamente correlata è per Ubuntu, ma non sono ancora riuscito a trovare gcc-5 nel server ftp di debian)


Questo è fornito in Debian / testing e, come vedi, comporta modifiche alle librerie di runtime. Qualcuno potrebbe consigliarti come farlo come pacchetto Debian, ma l'effetto sarebbe leggermente diverso dal passaggio alla configurazione di test a causa dell'elevato numero di pacchetti interessati.
Thomas Dickey,

Perché hai bisogno specificamente del nuovo supporto ABI ? Puoi costruire la maggior parte del codice C ++ 11 con gcc 4.9.2 di Debian 8, dovrai solo ricompilarlo quando viene rilasciato Debian 9. Se non puoi aspettare, la soluzione più semplice sarebbe passare a testing, ma probabilmente non è una buona idea su un server (a seconda di cosa intendi per server ovviamente). Il passaggio da gcc 4.9 a gcc 5 ha comportato una transizione di libreria, quindi ti troverai in un mondo di dolore se provi a farlo da solo!
Stephen Kitt,

Sono d'accordo con ciò che Thomas e Stephen affermano, tranne per il fatto che sono molto meno preoccupato dell'idea di utilizzare i test su un server. Non tutti i server richiedono l'uguaglianza a lungo termine di binari e librerie (che è ciò che significa "stabile" nel contesto debian), per alcuni server il monitoraggio dei test o anche instabile è più utile (se, diciamo, sono necessarie funzionalità all'avanguardia, o semplicemente per stare al passo con gli script kiddies). Tuttavia, l'esecuzione di testing / unstable su server di produzione richiede assolutamente molta competenza e conoscenza di Debian per correggere le rotture occasionali. Prima prova gli aggiornamenti su altre macchine o macchine virtuali.
Cas

@cas Non stavo pensando alla stabilità dei binari, ma piuttosto ai due principali svantaggi di testing(usato da solo): i pacchetti a volte vengono temporaneamente rimossi (quindi l'installazione che hai appena convalidato nella tua VM di prova potrebbe non essere più disponibile facilmente) e le correzioni di sicurezza possono essere ritardate (a volte per molto tempo se testingsta subendo una grande transizione nella libreria, sebbene ci sia testing-securityper tali casi).
Stephen Kitt,

1
Se ricompili il tuo programma sul sistema Debian (invece di copiarlo) dovrebbe funzionare bene.
Stephen Kitt,

Risposte:


13

Avevo bisogno di installare GCC 5+ su debian jessie e, dato che è disponibile per i test debian (almeno il 16 giugno), puoi usare apt-pinning per installare i pacchetti disponibili lì (vedi https://wiki.debian.org/AptPreferences ) .

Per installare GCC 5+ dai test su debian jessie usando apt-pinning:

  1. Aggiungi il repository di test debian ai tuoi sorgenti apt creando un file nella directory /etc/apt/sources.list.dcontenente la linea

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

  2. Indicare a debian di utilizzare le fonti di test su determinati pacchetti creando un file /etc/apt/preferences.dcontenente quanto segue:

    Package: *
    Pin: release a=testing
    Pin-Priority: 100
    
  3. Aggiorna database apt: sudo apt-get update

  4. Installa gcc dai test: sudo apt-get install -t testing gcc

    Si noti che usando -t testingsi dice a apt-get di installare gcc da fonti di prova come configurato in precedenza.

Consiglio vivamente di ripulire qualsiasi compilazione e ricompilare qualsiasi dipendenza prima di compilare nuovamente le fonti.

Divertiti!


1
Non l'ho mai provato (né desidero provarlo), ma la tua procedura è interessante. Non molte suite software sono strettamente legate e intrecciate all'intero sistema Debian come GCC. La tua procedura funziona davvero? O causa più problemi di quanti ne risolva? Curioso.
thb,

1
In realtà l'ho provato con buoni risultati: ho potuto compilare con successo ciò che stavo costruendo e il sistema ha continuato a funzionare senza problemi. Tuttavia, potresti avere ragione: cambiare la versione di GCC potrebbe interrompere la compilazione di altri pacchetti (ovvero compilare le fonti durante l'installazione di pacchetti con pip) , ma penso che questa procedura sia la meno invasiva perché aptterrà traccia di quali pacchetti dipendono da GCC e installerà le versioni compatibili se necessario (per quanto posso ricordare).
llekn,

2
Nota per il passaggio 2: il file in /etc/apt/preferences.d/ non deve contenere un punto "." nel nome del file o termina con ".pref". Altrimenti, questo file viene ignorato. Una spiegazione del significato del valore 100 e del perché è stata scelta sarebbe apprezzata.
Ludwig Schulze,

A quanto ho capito, più Pin-Priorityun pacchetto ottiene, maggiore sarà la preferenza rispetto ad altri pacchetti con un numero inferiore. Quindi, come afferma la pagina Dept AptPrefences di Debian , testingper impostazione predefinita si fa in modo Pin-Priority: 900che tutti i pacchetti testingvengano installati per impostazione predefinita. Quindi, specificando che testingavrà una priorità dei pacchetti più Pin-Priority: 100bassa testingrendendoli installabili solo se richiesto quando si specifica la destinazione aapt-get install -t testing ...
llekn

1
@ LeeK-B In effetti, usando si Package: gccaggiorna l'intero sistema ai test. La documentazione su apt-prefencesè confusa, quindi suppongo che questo sia ciò che sta accadendo: 1: poiché i pacchetti dai test hanno versioni maggiori, per impostazione predefinita hanno la precedenza su quelli standard 2: Specifica del pacchetto: gcccon Pin-priority: 100rende tutti i pacchetti dai test con priorità predefinita (maggiore di standard) tranne gcc. Esattamente il contrario che volevamo. Ho aggiornato la risposta per evitare questo errore
llekn

6

Per combinare le 2 risposte precedenti in una che funziona:

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

MA!!! Usalo a tuo rischio e pericolo mentre stai installando pacchetti da unstable. Potresti anche voler rimuovere /etc/apt/sources.list.d/unstable.listuna volta installati i pacchetti.

Se possibile, installare sotto Docker in modo da non rovinare il sistema operativo. Il tuo chilometraggio può variare.


4

A partire dal 19-02-2017, gcc-5 è stato rimosso dai test:

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

È possibile apt-get install gcc-5se si esegue prima questa riga come root:

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

Quindi, probabilmente vorrai cambiare la priorità di quella fonte in /etc/apt/preferences.dbase alla risposta di llekn.


1

Ho avuto problemi la settimana scorsa; sembra che dal 23-01-2019 gcc-5 sia stato rimosso completamente dai repository. (Vedi https://tracker.debian.org/pkg/gcc-5 )

Se ne hai davvero bisogno, suppongo che potresti compilarlo dal sorgente. Ho intenzione di trovare un modo per eliminare la dipendenza dal mio sistema.

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.