Utiliser Gentoo et Calculate Linux

Gentoo : Mise à jour de GCC

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières



Introduction



Après une mise à jour de GCC, souvent, c'est toujours la version précédente qui est utilisée pour compiler.
Si cette version a été désinstallée, les paquets échouent à la compilation.

Mise à jour de GCC



On se rend compte que GCC va être mis à jour quand GCC apparait dans la liste des mises à jour (normal) :
Code BASH :
[ebuild   U    ] sys-devel/gcc-5.4.0:5.4.0::gentoo  USE="cxx fortran (multilib) nls nptl objc openmp sanitize vtv (-altivec) (-awt) -cilk -debug -doc (-fixed-point) -gcj -go -graphite (-hardened) (-libssp) -multislot -nopie -nossp -objc++ -objc-gc -regression-test -vanilla" 87941 KiB

On peut faire la mise à jour de GCC avant celle du système, afin d'activer la nouvelle version de GCC avant la mise à jour (et notamment de ses paquets liés comme glibc, binutils, ...)
Code BASH :
emerge -1u sys-devel/gcc


Que faire après la mise à jour



Après la mise à jour de GCC, il faut passer sur la nouvelle version de GCC puis si besoin retirer l'ancienne.
Pour remédier à ça, on exécute la commande suivante :
Code BASH :
 gcc-config -l

Elle nous indique (par exemple) :
Code BASH :
 [1] x86_64-pc-linux-gnu-4.9.3 *
 [2] x86_64-pc-linux-gnu-5.4.0 

ou, si l'ancienne version de GCC a été supprimée (manuellement ou avec emerge -ac) :
Code TEXT :
 * gcc-config: Active gcc profile is invalid!
 [1] x86_64-pc-linux-gnu-5.4.0

Donc, on va activer cette nouvelle version dans notre système (exemple ici quand il ne reste que x86_64-pc-linux-gnu-5.4.0 ) :
Code BASH :
gcc-config 1

Code TEXT :
 * Switching native-compiler to x86_64-pc-linux-gnu-5.4.0 ...
>>> Regenerating /etc/ld.so.cache...                                                                                                                                                   [ ok ]
 * If you intend to use the gcc from the new profile in an already
 * running shell, please remember to do:
 *   . /etc/profile

Ensuite, on recharge dans notre console l'environnement :
Code BASH :
 env-update && source /etc/profile 

Il est nécessaire de recompiler des paquets dépendant fortement de gcc, comme libtool (et optionnellement clang et llvm) :
Code BASH :
emerge -1 sys-devel/libtool sys-devel/llvm sys-devel/clang

Puis on peut utiliser l'outil fixlibtool en spécifiant l'ancienne version de GCC pour recréer les liens écrits en dur dans les éventuels fichiers :
Code TEXT :
Usage: fix_libtool_files.sh <old-gcc-version> [--oldarch <old-CHOST>]

Code BASH :
 fix_libtool_files.sh 4.9.3

Code TEXT :
Scanning libtool files for hardcoded gcc library paths...
 *   [1/12] Scanning /lib ...
 *   [2/12] Scanning /usr/lib ...
 *   [3/12] Scanning /lib32 ...
 *   [4/12] Scanning /lib64 ...
 *   [5/12] Scanning /usr/games/lib ...
 *   [6/12] Scanning /usr/games/lib32 ...
 *   [7/12] Scanning /usr/games/lib64 ...
 *   [8/12] Scanning /usr/lib32 ...
 *   [9/12] Scanning /usr/lib64 ...
 *   [10/12] Scanning /usr/local/lib ...
 *   [11/12] Scanning /usr/local/lib32 ...
 *   [12/12] Scanning /usr/local/lib64 ...
 

Et c'est réglé !

Recompiler tous les paquetse



L'option la plus "sécure" de ne pas avoir de problèmes est de recompiler la base du système avec le nouveau GCC
Code BASH :
emerge -e @system

voire tout le système :
Code BASH :
emerge -e @world

Mais cela prend un temps infini.
Dans la plupart des cas, les paquets réinstallés ci-dessus feront l'affaire.

Quelques erreurs rencontrées



configure: error: C compiler cannot create executables



Il se peut aussi que ce message apparaisse lors d'une compilation de paquets :
Code TEXT :
checking for x86_64-pc-linux-gnu-gcc... x86_64-pc-linux-gnu-gcc
checking whether the C compiler works... no
configure: error: in `/var/calculate/tmp/portage/dev-libs/libmix-2.05-r7/work/libmix-v2.05':
configure: error: C compiler cannot create executables
See `config.log' for more details
 

Il suffit de recompiler la base du système sauf GCC :
Code BASH :
emerge -e @system --exclude gcc

symbol lookup error



Si certaines applications ne se lancent pas correctement :
Code BASH :
symbol lookup error: clementine: undefined symbol

Il suffit de recompiler (ou télécharger à nouveau les binaires qui ont été régénérés chez Calculate par exemple) les applications qui dépendent directement de GCC via cette commande :
Code BASH :
revdep-rebuild --library 'libstdc++.so.6' -- --exclude gcc


:magic: