Tecnologia e non solo

settembre 6, 2008

C’è compilatore e compilatore.

Filed under: Debian,Guida pericolosa,Intrepid,Sid — telperion @ 4:04 pm

Aggiornamento 9/9/08

Con il compilatore gcc 4.3 alcuni programmi (esempio virtualbox-ose) non si compilano, è quindi necessario usare un’altra versione.

Su Gentoo esiste gcc-config che ci agevola come visto,
mentre nelle Debian based pare non ci sia nulla,
mi aspettavo un update-alternatives --config gcc, ma nulla.

E invece no.
Ma facciamo un passo indietro. Paura?!


Allora in precedenza ho usato il metodo manuale:

andate nella cartella

cd /usr/bin

tutti i successivi comandi devono essere dati in questa cartella

ls gcc*

vi dirà che compilatori sono installati

gcc gcc-4.2 gcc-4.3 gccmakedep

qui vediamo che abbiamo il gcc-4.2 e il gcc-4.3.
Se avete solo il 4.3 potete installarne un altro.

Ora con

ls -l gcc g++

vediamo il compilatore in uso

lrwxrwxrwx 1 root root 7 2008-09-02 19:59 g++ -> g++-4.3
lrwxrwxrwx 1 root root 7 2008-09-02 19:59 gcc -> gcc-4.3

nel nostro caso la versione 4.3. Come cambiarlo?
Semplice linkando i simboli alla 4.2 con i comandi

sudo ln -sf gcc-4.2 gcc

sudo ln -sf g++-4.2 g++

a questo punto potete compilare anche con debuild e cartelle debian,
che sono completamente impermeabili ai vari export CC=blabla.

Al termine potete rimettere tutto a posto con un bel

cd /usr/bin && sudo ln -sf gcc-4.3 gcc && sudo ln -sf g++-4.3 g++ && ls -l gcc g++

Se conoscete un tool …

LA SVOLTA
————————————

Grazie all’ottima segnalazione di Antonio Doldo di questa discussione ho scoperto che le update-alternatives possono essere create modificate ed eliminate a piacimento su sistemi debian based.

Vediamo come procedere, per i dettagli man update-alternatives nel solito linguaggio eccessivamente tecnico ci dice tutto.

Allora nell’esempio sopra abbiamo gcc-4.2 e gcc-4.3 come alternative.
Creiamo le due alternative con

   --install genname symlink  altern  priority  [--slave  genname  symlink
       altern]... 

quindi tradotto

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.3

per la versione 4.3 dove il link /usr/bin/gcc del symlink gcc punta a /usr/bin/gcc-4.3 con priorità 60 (numero alto maggiore priorità) e lo “schiavo” /usr/bin/g++ punta a /usr/bin/g++-4.3.

Aggiungiamo la seconda alternativa per il gcc-4.2

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.2 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.2

qui la priorita è 40 il resto come sopra.

Ora digitando:

sudo update-alternatives --config gcc

otterremo un bel:

mc@mc-desktop:~$ sudo update-alternatives --config gcc
[sudo] password for mc: 

Ci sono 2 alternative che forniscono `gcc'.

  Selezione    Alternativa
-----------------------------------------------
*+        1    /usr/bin/gcc-4.3
          2    /usr/bin/gcc-4.2

Premi invio per mantenere il default[*], o inserisci il numero da selezionare:

Tada!

Come vedete l’alternativa con priorità più alta (60) viene segnata come default *

Potete verificare i link simbolici con:

sudo update-alternatives --display gcc

oppure direttamente con

ls -l /usr/bin/gcc /etc/alternatives/gcc /usr/bin/g++ /etc/alternatives/g++

Per rimuovere un’alternativa esempio la gcc-4.2:

 --remove nome percorso 
       Rimuove percorso dal gruppo di alternative nome

quindi:

sudo update-alternatives --remove gcc /usr/bin/gcc-4.2

per esempio perchè lo avete disinstallato.

In caso di aggiornamenti dei gcc conviene verificare e nel caso ricreare le alternative.

Per cancellare tutte le alternative

sudo update-alternatives --remove-all gcc

e non avrete più gcc in update-alternatives.
Dovrete però ripristinare i due link simbolici con (esempio nel caso di gcc-4.3)

cd /usr/bin && sudo ln -sf gcc-4.3 gcc && sudo ln -sf g++-4.3 g++ && ls -l gcc g++

😀

Due immagini di sudo update-alternatives –config gcc su debian sid con gc-4.3 e gcc-4.1:
schermata1 schermata2

E per i più pigri esiste anche un’interfaccia grafica: galternatives (pacchetto)

immagine galternatives

Annunci

15 commenti

  1. Provato con:

    export CC=gcc-4.2

    ?

    Commento di guiodic — settembre 6, 2008 @ 5:14 pm

  2. Letto:

    a questo punto potete compilare anche con debuild e cartelle debian,
    che sono completamente impermeabili ai vari export CC=blabla.

    ?

    Commento di telperion — settembre 6, 2008 @ 5:19 pm

  3. ops 🙂

    Commento di guiodic — settembre 7, 2008 @ 1:18 am

  4. semiot: (visto che l’hai nominata) virtualbox 2.0.0 compila con gcc 4.3
    😀

    Commento di LuNa — settembre 7, 2008 @ 3:17 am

  5. è la stessa mossa di quanto ho fatto giorni fa per virtualbox-ose, anche se secondo è poco pulita, forse ci potrebbe essere come per java un update-alternatives, forse in questo link:
    http://ubuntuforums.org/showthread.php?t=80145

    @LuNa
    graze dell’info, per ora rimango al 4.2

    Commento di Antonio Doldo — settembre 7, 2008 @ 1:59 pm

  6. @Antonio

    Grandiosa segnalazione.
    Non sapevo che le update-alternatives si potessero creare.

    Et voilà bello e pulito:

    Commento di telperion — settembre 7, 2008 @ 4:37 pm

  7. Mitico Telperion! io ho solo dato un link 🙂
    metterò anch’io i miei alternatives 😀

    Commento di Antonio Doldo — settembre 8, 2008 @ 8:06 am

  8. scusa per il doppio commento, da dove ti sto scrivendo (U. intrepid) ho usato (ammesso che wp mantenga il code):
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.2 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.2
    sudo update-alternatives --config gcc

    che credo sia quello fatto da te.
    Grazie,
    Antonio

    Commento di Antonio Doldo — settembre 8, 2008 @ 8:20 am

  9. @Antonio
    ho integrato l’articolo con le spiegazioni per impostare update-alternatives per gcc.

    Commento di telperion — settembre 8, 2008 @ 12:52 pm

  10. grande, aggiungo a del.icio.us 😀
    tag: “GUIDE STORICHE” 😉

    Commento di Antonio Doldo — settembre 8, 2008 @ 3:19 pm

  11. azz, che dire “figherrimo” va bene ? 😀
    e pensare che la vedevo come una “esclusiva” di gentoo e il suo (ottimo) gcc-config.

    Commento di LuNa — settembre 8, 2008 @ 3:53 pm

  12. sudo update-alternatives –config cc

    è questo quello che volevi tu?
    credo di si.

    Commento di scimmia — settembre 16, 2008 @ 7:08 am

  13. Grazie per la tua guida!!!
    Mi è stata molto utile 😀

    Commento di mike — ottobre 31, 2008 @ 2:39 pm

  14. insomma prima devo dare:

    sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-4.3 60 –slave /usr/bin/g++ g++ /usr/bin/g++-4.3
    sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-4.2 40 –slave /usr/bin/g++ g++ /usr/bin/g++-4.2

    e poi:

    sudo update-alternatives –config gcc

    Insomma un’incredibile comodità rispetto a:

    gcc-config

    di gentoo non c’è che dire! Non capisco come la gente possa dire che Gentoo sia
    una distribuzione difficile…bah!

    Commento di Alberto — aprile 17, 2009 @ 6:54 am

    • Mah… io trovo gentoo il sistema più flessibile del pianeta.
      Tutto il sistema compilato su propria cpu permette davvero un salto di qualità prestazionale (esempio compress-gzip 14 secondi contro 83 di precompilata su mio core2 😮 :D)
      Portage semplifica il quasi impossibile.

      E’ geniale…. dovreste provarla 🙂

      Commento di cawnus — agosto 5, 2010 @ 1:15 pm


RSS feed for comments on this post.

%d blogger hanno fatto clic su Mi Piace per questo: