# gcc-4.3.2 stable per amd64

## dynamite

Ciao a tutti, sono alle prese con il primo vero aggiornamento delle gcc da quando uso gentoo, in particolare passo da 4.1.2 a 4.3.2. Sono andato a leggere la guida nella documentazione e quindi se ho ben capito devo dare:

```
(Si ponga attenzione a sostituire "i686-pc-linux-gnu-4.1.1" con la versione del GCC a cui si è aggiornato e l'impostazione per CHOST del proprio sistema)

# gcc-config i686-pc-linux-gnu-4.1.1

# env-update && source /etc/profile

(Ricompilazione di libtool)

# emerge --oneshot -av libtool
```

e poi aggiornare system e world.

Ho però alcuni dubbi:

1. Perchè devo ricompilare libtool? Vale in generale o si riferisce all'aggiornamento dalla versione 3 a 4 (dalla documentazione non si capisce bene)?

2. Ho letto che dalla versione 4.2 in poi, è supportata l'opzione "march=native" e da questa versione in particolare "march=core2", quale delle due è da preferire? 

Scusate ma sono piuttosto ignorante e qui non dicono molto. 

p.s.: posseggo un T7300 e sono in amd64.

Grazie mille

----------

## publiosulpicio

Io uso senza nessun problema questa guida: https://forums.gentoo.org/viewtopic-t-494331.html. È molto dettagliata, non puoi sbagliare. Sto ricompilando in questo momento!

N.B. Forse l'unica cosa che la guida non specifica è che potrebbe essere opportuno fare dei cambiamenti a make.conf, io per esempio sono passato da march=nocona a march=core2 (non ho ancora capito se march=native sia meglio). Controlla qui http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel se per il tuo processore c'è qualcosa di nuovo con la nuova versione di GCC.

----------

## dynamite

Grazie per l'utile link. Pensavo anch'io di passare a "core2", ma appunto ero in cerca di qualche conferma... Vedrò di mettermi nei prossimi giorni ad eseguire il tutto, perchè in ogni caso è un processo decisamente lungo...  :Very Happy: 

----------

## cloc3

 *dynamite wrote:*   

> 
> 
> Ho però alcuni dubbi:
> 
> 1. Perchè devo ricompilare libtool?
> ...

 

non lo so, ma ti assicuro che devi farlo.

libtool dovrebbe essere il programma che esegue l'ultima fase della compilazione (linking ?).

evidentemente ha bisogno di conoscere il gcc attuale per funzionare a dovere.

 *dynamite wrote:*   

> 
> 
> 2. Ho letto che dalla versione 4.2 in poi, è supportata l'opzione "march=native" e da questa versione in particolare "march=core2", quale delle due è da preferire? 
> 
> 

 

l'opzione native legge il file /proc/cpuinfo ed opera le proprie scelte di compilazione.

core2 segue le istruzioni di una qualche tabella messa da qualche parte.

probabilmente, se il tuo processore è un core2, produci lo stesso identico codice o quasi.

se invece hai un processore che non è un core2, ma vuoi produrre pacchetti ottimizzato per un core2, allora devi assolutamente scegliere la seconda opzione.

----------

## djinnZ

native te la sconsiglio come opzione. Non tanto per i risultati quanto per l'impossibilità a trovare eventuali pacchetti da ricompilare e poter gestire senza troppe paranoie il cross building (se poi hai più computer tutti con la medesima cpu puoi anche fregartene).

----------

## dynamite

Grazie delle risposte, ho un solo pc con gentoo, quindi alcuni problemi lì posso evitare senza sforzo   :Wink:  penso che per adotterò core2 per non sbagliare... sì prospettano almeno due giorni di compilazione...  :Shocked: 

----------

## Krog

salve, anche io stavo aggiornando gcc

è proprio necessario ricompilare tutto system e word? sul mio macinino ci vorranno giornate...

grazie per la risposta  :Smile: 

----------

## publiosulpicio

Bhè, se gcc 4.1.2 non ti ha dato problemi puoi tenere quello (come dice la guida! In sostanza non fare nulla dopo l'aggiornamento, avrai semplicemente due versioni installate, ma il sistema continuerà ad usare quella vecchia). Dopo l'agiornamento emerge --depclean cercherà di disinstallare la versione 4.1.2, basta che la aggiungi al tuo file di world con emerge --noreplace =sys-devel/gcc-4.1.2.

----------

## Krog

ho ricompilato libtool, kernel, moduli esterni e sto compilando kde4 (overlay) con questo nuovo gcc (ma solo perchè è uscito un nuovo snapshot), sembra anche un pochetto più veloce.

ma NON ho ricompilato tutto system e word... devo aspettarmi problemi?

----------

## mack1

Se non c'è un cambio di abi a livello del compilatore il passaggio ad una nuova versione del gcc non comporta una incompatibilità dei binari prodotti, quindi non devi ricompilare tutto.

Di problemi non dovresti averne, io mi sono fatto la 4.1.2>>>4.2.3>>>4.3.2>>>4.3.3 ed è filato tutto liscio  :Very Happy:  .

Comunque di norma, dopo un passaggio di versione, dovresti almeno ricompilare la toolchain (gcc,glibc e binutils) anche se non è obbligatorio, alcuni si fanno poi il system ed infine i più coraggiosi riemergono il mondo  :Smile:   (vogliono avere i binari ottimizzati con l'ultima versione di gcc installata).

Qui trovi la guida ufficiale:

http://www.gentoo.org/doc/it/gcc-upgrading.xml

Libtool è uno strumento per aumentare la portabilità del software fra vari sistemi unix-like, astraendo la complessità del processo di linking.  

http://en.wikipedia.org/wiki/Libtool

http://en.wikipedia.org/wiki/GNU_build_system

Ciao

----------

## Krog

thanks!

----------

## fbcyborg

Io seguo la guida ufficiale.

Al codice 2.2 dice di fare 

```
# emerge -eav system

# emerge -eav world

```

Io sto facendo prima world e poi system. Ma system non è incluso in world???

----------

## Scen

 *fbcyborg wrote:*   

> Io sto facendo prima world e poi system. Ma system non è incluso in world???

 

system è l'insieme dei pacchetti di sistema, ovvero quelli che ti ritrovi installati dopo aver scompattato lo stage3. world è l'insieme di pacchetti installati, direttamente o indirettamente, di propria volontà (tramite [i]emerge <pacchetto</i]).

Fino ad un pò di tempo fa il metapacchetto world includeva anche quello system.

Con le versioni più recenti di Portage ciò non è più vero (non ricordo da quando, perdona).

Qui c'è una discussione a riguardo, sulla ML gentoo-dev.

Tu segui la guida alla lettera, ovvero prima system e poi world, che è meglio (come diceva il puffo Quattrocchi   :Cool:  )

----------

## fbcyborg

Grazie mille. Non avevo letto il fatto che system non fosse più incluso in world.

----------

## riverdragon

E comunque ai tempi il senso era: visto che usi i pacchetti in system per compilare i pacchetti in system è buona cosa fare due giri; col primo compili system con la toolchain vecchia, quando la toolchain nuova è pronta la puoi usare per ricompilare se stessa e tutto il resto del sistema. Probabilmente si sono accorti che non serviva.

----------

## mack1

La guida giustamente consiglia di ricompilare prima il system e poi world, che è il sistema per non avere problemi, visto che i fattori da tenere in considerazione sono innumerevoli (cambio di ABI senza retrocompatibilità,modifica delle flags attivate di default da gcc, modifica delle CFLAGS/CXXFLAGS/LDFLAGS da parte dell'utente per avvantaggiarsi delle nuove caratteristiche offerte, varie ed eventuali).

Ho sbagliato a portare un'esperienza personale   :Embarassed:  come fosse la norma su una procedura in cui rientrano molti fattori da considerare e che può, se mal gestita, portare alla "rottura" del sistema, ciò non toglie che la ricompilazione sia del tutto superflua in casi di aggiornamenti di minor release (es. da gcc-x.x.2 a gcc-x.x.3) poichè trattasi di bugfix nella stragrande maggioranza dei casi o se l'utente, seguendo lo sviluppo di gcc, non riscontra quei fattori (citati sopra) che potrebbero portare problemi.

Ok il vero geek ricompila sempre due volte  :Very Happy:  :

http://www.youtube.com/watch?v=6WxJECOFg8w

Ciao

----------

## djinnZ

vedi che non è necessario compilare due volte, è necessario compilare prima tutte le dipendenze di system. A meno che non vuoi impazzire a crearti un tuo script per gestire la giusta sequenza il mentodo più semplice è compilare due volte.

tanto per fare il puntiglioso come al solito.  :Twisted Evil: 

----------

## publiosulpicio

 *djinnZ wrote:*   

> vedi che non è necessario compilare due volte, è necessario compilare prima tutte le dipendenze di system. A meno che non vuoi impazzire a crearti un tuo script per gestire la giusta sequenza il mentodo più semplice è compilare due volte.
> 
> tanto per fare il puntiglioso come al solito. 

 

Lo script qui https://forums.gentoo.org/viewtopic-t-494331.html dovrebbe fare esattamente questo. A me ha funzionato!

----------

