Hai scaricato g ++ 4.8 dal PPA ma non puoi impostarlo come predefinito?


15

Ho scaricato g ++ 4.8 su Ubuntu 12.10 facendo:

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

ma quando lo faccio:

sudo update-alternatives --config g++

per cambiare le versioni di g ++ dice:

update-alternatives: error: no alternatives for g++.

Tuttavia se lo faccio:

g++ --version

dice:

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Come posso impostare la mia installazione di g ++ 4.8 come predefinita g ++?

Risposte:


11

Prima di tutto, devi scoprire dove sono i tuoi binari 4.8 di tutti gli strumenti:

$ which gcc-4.8
/usr/bin/gcc-4.8
$ which g++-4.8
/usr/bin/g++-4.8
$ ls /usr/bin/*-4.8
/usr/bin/cpp-4.8         /usr/bin/x86_64-linux-gnu-cpp-4.8
/usr/bin/g++-4.8         /usr/bin/x86_64-linux-gnu-g++-4.8
/usr/bin/gcc-4.8         /usr/bin/x86_64-linux-gnu-gcc-4.8
/usr/bin/gcc-ar-4.8      /usr/bin/x86_64-linux-gnu-gcc-ar-4.8
/usr/bin/gcc-nm-4.8      /usr/bin/x86_64-linux-gnu-gcc-nm-4.8
/usr/bin/gcc-ranlib-4.8  /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.8
/usr/bin/gcov-4.8

Quindi, abbiamo tutti i nostri binari, ora vediamo se alcuni collegamenti simbolici sono disponibili per tali binari:

$ cd /usr/bin
$ ls -l gcc* cpp g++
lrwxrwxrwx 1 root root      7 sep 18 14:02 cpp -> cpp-4.7
lrwxrwxrwx 1 root root      7 abr 22  2013 g++ -> g++-4.7
lrwxrwxrwx 1 root root      7 sep 18 14:02 gcc -> gcc-4.7

Come possiamo vedere, solo cpp, g++e gccha collegamenti simbolici. Abbiamo due opzioni qui.

Collegamento simbolico

Sostituiamo i symlink con i nostri, rimuovendo prima gli effettivi:

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++

Quindi creando il nostro

sudo ln -s /usr/bin/cpp-4.8 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++

Per ripristinarlo, usa gli stessi comandi ma con 4.7 o 4.6

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/cpp-4.7 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.7 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.7 /usr/bin/g++

Quando l'ho fatto: ls -l gcc * cpp g ++ ha restituito: ls: impossibile accedere a gcc *: nessun file o directory ls: impossibile accedere a cpp: nessun file o directory ls: impossibile accedere a g ++: nessun file o directory
user997112

Non sono necessarie scuse :) Quando chiamo la funzione di rimozione funziona, ma quando vado a creare i "nostri" collegamenti simbolici, dice: sudo ln -s -T / usr / bin / cpp /usr/bin/cpp-4.8 ln: fallito per creare un collegamento simbolico `/usr/bin/cpp-4.8 ': il file esiste
user997112

(Ho chiamato due volte il comando rm solo così la seconda volta ha confermato / lamentato che i collegamenti esistenti erano stati effettivamente eliminati)
user997112

3
Questa è un'idea terribile . Ci sono molti programmi che usano gccper compilare i moduli del kernel e alcuni di essi (ad esempio Nvidia) si arrestano in modo silenzioso quando gccchiamano non sarà quello con cui è stato compilato il kernel.
nbubis,

1
@nububis, la domanda è "Come faccio a impostare la mia installazione di g ++ 4.8 come g ++ predefinito?", quindi, si dovrebbe presumere che chiunque lo faccia, sappiano cosa stanno facendo, no? D'altra parte, quale alternativa puoi proporre?
Braiam,

16

Devi far update-alternativessapere che hai 2 compilatori C ++, creare un record per ognuno e quindi configurare quale vuoi usare. Questo viene fatto con il seguente:

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6.3 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 40
sudo update-alternatives --config g++ 

Da questo punto in poi, l'unica cosa richiesta quando si cambia compilatore è questo comando:

sudo update-alternatives --config g++

Vedi man update-alternativesper maggiori informazioni.

Fonte: come utilizzare più istanze di gcc?


@Braiam Può essere fatto allo stesso modo con qualsiasi pacchetto.
Radu Rădeanu,

3
Qualcuno può elaborare i 60 e 40? L'ho visto in molti posti
user997112

@ user997112 Ti consiglio di leggere l'uomo, ma, se ti piacciono più 70 e 30, quindi usa 70 e 30 ...
Radu Rădeanu

1
@ user997112 questi sono numeri prioritari e sono rilevanti solo quando si utilizza --auto. puoi vedere alcuni esempi usandoupdate-alternatives --display editor
Braiam

2
Il 12.04 ottengo: update-alternatives: errore: alternativa g ++ non può essere master: è uno slave di gcc
rickfoosusa

9

Questa è la grande descrizione e le istruzioni dettagliate su come creare e gestire alternative master e slave (gcc e g ++).

In breve, lo è

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 
sudo update-alternatives --config gcc

Benvenuto in Ask Ubuntu! Mentre questo può teoricamente rispondere alla domanda, sarebbe preferibile includere le parti essenziali del risposta qui, e fornire il link di riferimento.
Stormvirux,

Hai ragione. Ho aggiunto la parte essenziale
Anton K

1
Mi ha salvato la giornata con quella roba da schiavo. tx
Lennart Rolland
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.