[Mageia 6]Compiler et installer GCC 6, 7, 8 ou 9

[Mageia 6]Compiler et installer GCC 6, 7, 8 ou 9

Introduction :

Je suis sur Mageia 6 et suite à une question que j’avais posée sur le forum de Mageia. J’ai décidé de me lancer et de compiler les versions que je souhaite de gcc.
Sur Ubuntu le problème se pose beaucoup moins car les paquets pour installer gcc6, 7 et 8 sont fournis.

Attention si vous êtes sur Mageia 7, qui est encore en bêta au moment où j’écris cet article, gcc 8.2.1 est la nouvelle version par défaut de gcc.

Tout d’abord des liens utiles:

Résumé :

$ su
# urpmi lib64gmp-devel
# urpmi lib64mpfr-devel
# urpmi lib64mpc-devel
# urpmi lib64isl-devel
# exit # pour quitter le mode administrateur

Pour les exemples j’utilise la dernière release de gcc8 : gcc-8.3.0. A vous de remplacer les «8_3_0» et «8.3.0» par votre version de gcc.

$ mkdir gcc8
$ cd gcc8
$ svn checkout svn://gcc.gnu.org/svn/gcc/tags/gcc_8_3_0_release/ source
$ mkdir obj
$ cd obj
$ ../source/configure --with-isl-include=/usr/include/ --with-isl-lib=/usr/lib64/ --program-suffix=-8.3.0 --prefix=/usr --libdir=/usr/lib/gcc/8.3.0/lib --datarootdir=/usr/share/gcc/8.3.0 -bindir=/usr/bin --libexecdir=/usr/libexec --includedir=/usr/include
# 16 étant le nombre de cpu de ma machine à vous de mettre le nombre de thread que vous souhaité.
$ make -j 16

Pour l’installation deux solutions :
Installer gcc dans un répertoire à part.

$ make DESTDIR=/home/suryavarman/working/gcc8/dest install

Installer gcc dans l’arborescence de /usr/

$ su
# make install

Menu

Le tutorial est divisé ainsi:

  1. Téléchargement
  2. Configuration
  3. Compilation
  4. Tester la compilation
  5. Installation
  6. Tester l’installation
  7. Utilisation
  8. Désinstallation

Téléchargement:

Le code source de gcc est disponible via Subversion (SVN).
Rendez-vous sur les deux liens suivant pour choisir votre branche ou votre «release»:

Sur Mageia 6 seulement gcc5 est disponible. J’ai donc décidé de compiler la version 6, 7 et 8.
Pour ce qui suivra, j’ai créé un dossier gcc6, gcc7 et un dossier gcc8. Les commandes suivantes sont exécutée dans chacun des dossiers respectif.

Ce qui respectivement donne les lignes de commandes suivantes :

Configuration:

L’équipe de gcc travail et test gcc avec un répertoire différent de là où se situe le dépôt.

Le dossier où se situe les fichiers et dossiers versionnés est appelé :

srcdir

Le dossier où se situe les fichiers et dossiers générés est appelé :

objdir

De tel sorte que la configuration s’établira de cette manière:

[gcc6]# mkdir obj
[obj]# cd obj
[obj]# ../source/configure [options] [target]

Ici on peut trouver la liste des compilations réussies. Ce qui permet d’accéder à leur configuration. Ces configurations sont natives, c’est à dire prêt configurées.

Dans mon cas il s’agit de la configuration :

x86_64-pc-linux-gnu

Ici un exemple de compilation.

Du coup je n’ai pas de configuration spécifique les options «build», «host» et «target» sont les mêmes. Je laisse donc par défaut le script configure s’exécuter.

[obj]# ../source/configure
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /bin/install -c
checking whether ln works... yes
checking whether ln -s works... yes
checking for a sed that does not truncate output... /bin/sed
checking for gawk... gawk
checking for libatomic support... yes
checking for libitm support... yes
checking for libsanitizer support... yes
checking for libvtv support... yes
checking for libmpx support... yes
checking for libhsail-rt support... yes
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking whether g++ accepts -static-libstdc++ -static-libgcc... no
checking for gnatbind... no
checking for gnatmake... no
checking whether compiler driver understands Ada... no
checking how to compare bootstrapped objects... cmp --ignore-initial=16 $$f1 $$f2
checking for objdir... .libs
checking for the correct version of gmp.h... yes
checking for the correct version of mpfr.h... yes
checking for the correct version of mpc.h... no
configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
their locations. Source code for these libraries can be found at
their respective hosting sites as well as at
ftp://gcc.gnu.org/pub/gcc/infrastructure/. See also
http://gcc.gnu.org/install/prerequisites.html for additional info. If
you obtained GMP, MPFR and/or MPC from a vendor distribution package,
make sure that you have installed both the libraries and the header
files. They may be located in separate packages.

Du coup il y a des erreurs c’est donc parti pour installer GMP 4.2+, MPFR 2.4.0+ et MPC 0.8.0+. Pour ma part ce sont seulement les librairies MPC et ISL qui sont manquantes.

Comme indiqué dans ce lien il y a trois manières de lier GCC à ces trois librairies.

  1. On peut utiliser celles fournies par le système de paquets (apt-get, urpmi etc). Si celui-ci les fournies.
  2. On peut télécharger les librairies que requiert gcc via la commande suivante:
    ./contrib/download_prerequisites
    
  3. On peut utiliser des sources différentes mais cela obligera à toujours inclure les librairies dans nos futurs projets :
    LD_LIBRARY_PATH=/some/silly/path/gmp:/some/silly/path/mpfr:/some/silly/path/mpc/lib
    

Pour installer MPC la commande est :

urpmi lib64mpc-devel

(Faites «su» avant pour être en mode administrateur.)
Pour installer ISL la commande est : (optionnel)

urpmi lib64isl-devel

(Faites «su» avant pour être en mode administrateur.)

Relancer la configuration et ça devrait être bon:

[obj]$ ../source/configure

Si vous souhaitez utiliser ISL (Graphite loop optimizations )
Lancez la commande suivante:

[obj]$ ../source/configure --with-isl-include=/usr/include/ --with-isl-lib=/usr/lib64/

Vous trouverez avec la commande urpmf les localisations des librairies que vous possédez déjà.

Les binaires:

/usr/lib64/libgmp.so.10.3.2
/usr/lib64/libmpfr.so.4.1.5
/usr/lib64/libmpc.so.3.0.0
/usr/lib64/libisl.so

Les liens sans le numéro de version ex:libgmp.so sont aussi dans le dossier /usr/lib64.
Les en-têtes:

/usr/include/gmp.h
/usr/include/mpfr.h
/usr/include/mpc.h
/usr/include/isl

Compilation:

Pour compiler gcc (16 étant le nombre de CPU de ma machine à vous de le remplacer par le nombre de processus que vous souhaitez.):

make -j 16

La compilation peut échouer à cause d’une erreur de segmentation.Si c’est le cas relancer la compilation. Ne faite rien sur votre PC en attendent, au-delà de trois erreurs de segmentation, c’est peut-être qu’il y a un problème.

Tester la compilation:

Je préviens je ne sais pas comment interpréter les résultats de ces tests. Mais si vous souhaitez vous y essayer, voici la démarche que j’ai effectuée.

Les applications prérequises:

urpmi dejagnu
urpmi tcl
urpmi expect

Ajout des variables d’environnements:

export "TCL_LIBRARY= /usr/share/tcl8.6"
export "DEJAGNULIBS= /usr/share/dejagnu"

Lancement des tests:

make -k check

Installation:

ATTENTION ne faite pas de bêtises il ne faut pas écraser le gcc5 fournis par mageia.

Installation dans un dossier à part:

Le chemin doit être globale.

$ make DESTDIR=/home/suryavarman/working/gcc8/dest install

Une configuration par défaut, c’est à dire celle proposée dans l’étape précédente, génère la hiérarchie suivante:

Voici ce que donne la configuration fournie dans le résumé en tête d’article
L’organisation de la hiérarchie est expliquée dans le rubrique suivante.

Installation dans «user»:

Si vou avez suivi la rubrique compilation vous avez une hiérarchie des dossiers par défaut qui n’est pas compatible avec la hiérarchie des dossiers de Mageia 6. Nous devons donc refaire la configuration et la compilation. Avant de reconfigurer gcc il vous faut supprimer l’intérieur du dossier «obj».

La configuration que je propose est compatible avec la hiérarchie du dossier user et la hiérarchie de gcc5.5.0 installer par défaut sur Mageia 6.

usr *
    |
    *—bin
    |
    *—include *
    |         |        
    |         *—c++ ————*
    |                   |
    |                   *—5.5.0
    |                   |
    |                   *—6.5.0
    |                   |
    |                   *—7.4.0
    |                   |
    |                   *—8.3.0
    |                   |
    |                   *—9.1.0
    |
    *—lib ——— *
    |         |        
    |         *—gcc ————*
    |                   |
    |                   *—6.5.0 — *
    |                   |         |
    |                   |         *—lib/gcc/x86_64-pc-linux-gnu/6.5.0/32
    |                   |         |
    |                   |         *—lib64
    |                   |
    |                   *—7.4.0 — *
    |                   |         |
    |                   |         *—lib/gcc/x86_64-pc-linux-gnu/7.4.0/32
    |                   |         |
    |                   |         *—lib64    
    |                   |
    |                   *—8.3.0 — *
    |                   |         |
    |                   |         *—lib/gcc/x86_64-pc-linux-gnu/8.3.0/32
    |                   |         |
    |                   |         *—lib64  
    |                   |
    |                   *—9.1.0 — *
    |                   |         |
    |                   |         *—lib/gcc/x86_64-pc-linux-gnu/9.1.0/32
    |                   |         |
    |                   |         *—lib64  
    |                   |
    |                   *—x86_64-mageia-linux-gnu/5.5.0/32        
    |
    *—lib64 — * # les librairies 64bits de gcc5.5.0 sont ici  et les raccourcis vers libstdc++.so.6      
    |        
    |
    *—libexec *
    |         |        
    |         *—gcc ————*
    |                   |    
    |                   *—x86_64-pc-linux-gnu — *
    |                                           |
    |                                           *—6.5.0 — *
    |                                           |
    |                                           *—7.4.0 — *
    |                                           |
    |                                           *—8.3.0 — *
    |                                           |
    |                                           *—9.1.0 — *
    *—share — *
              |
              *—gcc ————*
              |         |
              |         *—6.5.0 — *
              |         |         |
              |         |         *—gcc-6.5.0/python/libstdcxx/...
              |         |         |
              |         |         *— info  # pas de prefix 6.5.0
              |         |         |
              |         |         *— java
              |         |         |
              |         |         *— locale / ... # pas de prefix 6.5.0
              |         |         |
              |         |         *— man —— *
              |         |                   |              
              |         |                   *— man1 # ils ont tous l'extension 6.5.0 ce qui permettrait de les mettre dans le dossier usr/share/man/man1
              |         |                   |       # si pour autant les compresser en xz fonctionne à tester.
              |         |                   |              
              |         |                   *— man7            
              |         |        
              |         |
              |         *—7.4.0 — *
              |         |         |
              |         |         *—gcc-7.4.0/python/libstdcxx/...
              |         |         |
              |         |         *— info # pas de prefix 7.4.0
              |         |         |
              |         |         *— locale / ... # pas de prefix 7.4.0
              |         |         |
              |         |         *— man —— *
              |         |                   |              
              |         |                   *— man1 # ils ont tous l'extension 7.4.0 ce qui permettrait de les mettre dans le dossier usr/share/man/man1
              |         |                   |       # si pour autant les compresser en xz fonctionne à tester.
              |         |                   |              
              |         |                   *— man7
              |         |
              |         |
              |         *—8.3.0 — *
              |         |         |
              |         |         *—gcc-8.3.0/python/libstdcxx/...
              |         |         |
              |         |         *— info # pas de prefix 8.3.0
              |         |         |
              |         |         *— locale / ... # pas de prefix 8.3.0
              |         |         |
              |         |         *— man —— *
              |         |                   |              
              |         |                   *— man1 # ils ont tous l'extension 8.3.0 ce qui permettrait de les mettre dans le dossier usr/share/man/man1
              |         |                   |       # si pour autant les compresser en xz fonctionne à tester.
              |         |                   |              
              |         |                   *— man7 # pas de prefix 8.3.0      
              |         *—9.1.0 — *
              |                   |
              |                   *—gcc-9.1.0/python/libstdcxx/...
              |                   |
              |                   *— info # pas de prefix 9.1.0
              |                   |
              |                   *— locale / ... # pas de prefix 9.1.0
              |                   |
              |                   *— man —— *
              |                             |              
              |                             *— man1 # ils ont tous l'extension 9.1.0 ce qui permettrait de les mettre dans le dossier usr/share/man/man1
              |                             |       # si pour autant les compresser en xz fonctionne à tester.
              |                             |              
              |                             *— man7 # pas de prefix 9.1.0        
              |
              *—gcc-6.5.0/python/libjava
              |            
              *—info # ces ici que ce trouve par défaut les .info.xz mais il n'y a aucune info sur gcc.
              |
              *—locale/locale/fr/LC_MESSAGES  # il y a le fichier gcc.mo pour gcc-5.5.0
              |      
              *—man ————*
                        |
                        *— man1 # le fichier gcc.1.xz pour gcc-5.5.0
                        |
                        *— fr/man1 # le fichier gcc.1.xz pour gcc-5.5.0

Voici ce qu’il y a dans le dossier /usr/bin

Voici les configuration pour les trois version de gcc:

Pour gcc-9.1.0:

$ ../source/configure --with-isl-include=/usr/include/ --with-isl-lib=/usr/lib64/ --program-suffix=-9.1.0 --prefix=/usr --libdir=/usr/lib/gcc/9.1.0/lib --datarootdir=/usr/share/gcc/9.1.0 -bindir=/usr/bin --libexecdir=/usr/libexec --includedir=/usr/include

Pour gcc-8.3.0:

$ ../source/configure --with-isl-include=/usr/include/ --with-isl-lib=/usr/lib64/ --program-suffix=-8.3.0 --prefix=/usr --libdir=/usr/lib/gcc/8.3.0/lib --datarootdir=/usr/share/gcc/8.3.0 -bindir=/usr/bin --libexecdir=/usr/libexec --includedir=/usr/include

Pour gcc-7.4.0:

$ ../source/configure --with-isl-include=/usr/include/ --with-isl-lib=/usr/lib64/ --program-suffix=-7.4.0 --prefix=/usr --libdir=/usr/lib/gcc/7.4.0/lib --datarootdir=/usr/share/gcc/7.4.0 -bindir=/usr/bin --libexecdir=/usr/libexec --includedir=/usr/include

Pour gcc-6.5.0:

$ ../source/configure --with-isl-include=/usr/include/ --with-isl-lib=/usr/lib64/ --program-suffix=-6.5.0 --prefix=/usr --libdir=/usr/lib/gcc/6.5.0/lib --datarootdir=/usr/share/gcc/6.5.0 -bindir=/usr/bin --libexecdir=/usr/libexec --includedir=/usr/include

Voici les options disponibles pour définir les répertoires d’installation dans le préfixe qui sera user.

Documentation de configure:

--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]

Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names

Les erreurs:

  • x86_64-pc-linux-gnu-gcc-tmp n’a pas le suffix -8.3.0, du coup si vous faites l’installation dans la hiérarchie de usr le fichier /usr/bin/x86_64-pc-linux-gnu-gcc-tmp sera écrasé. Par contre je ne sais pas si par défaut il y était et au vue de la dénomination des fichiers (x86_64-mageia-linux-gnu-) j’ai l’impression que non.
  • Mageia utilise des .info.xz hors les types générés sont des .info. Cf: /usr/share/info

Bogue d’installation de gcc :

  • L’option includedir ne fonctionne pas, le dossier include sera mis dans prefix.
  • –libdir Le dossier lib et lib64 sont placer dans le répertoire parent.

    Exemples :

    • –libdir=/usr/lib : lib sera placé dans usr/lib et lib64 dans usr/lib64
    • –libdir=/usr/lib/gcc830 : : lib sera placé dans usr/lib et lib64 dans usr/lib/lib64
    • –libdir=/usr/lib/gcc/8.3.0/lib : : lib sera placé dans usr/lib/gcc/8.3.0/lib et lib64 dans usr/lib/gcc/8.3.0/lib64

Pour ajouter gcc-8.3.0 aux chemins systèmes

$ cd ~
$ kwrite .bashrc

Ajouter la ligne:

export LD_LIBRARY_PATH==/usr/lib/gcc/8.3.0/lib64:$LD_LIBRARY_PATH

Relancer .bashrc:

$ . .bashrc

Pour faire pointer gcc vers gcc-8.3.0 au lieu de gcc-5.5.0:

Les symlink à modifier sont :
A savoir que mageia à mis en place des raccourcis:
x86_64-mageia-linux-gnu-xxx-xxx
x86_64-mageia-linux-gnu-gcc-5.5.0
x86_64-mageia-linux-gnu-nm-5.5.0
x86_64-mageia-linux-gnu-ar-5.5.0

Ces fichiers ne seront donc pas impactés, de plus cela démontre une volonté de la part de l’équipe Mageia de distinguer la version de gcc nécessaire au bon fonctionnement de l’OS.

Remplacé le suffixe «8.3.0» par la version de votre gcc. Attention gcc9 a une version différente de libstdc++

ln -sf /usr/bin/c++-8.3.0 /usr/bin/c++
ln -sf /usr/bin/cpp-8.3.0 /usr/bin/cpp
ln -sf /usr/bin/g++-8.3.0 /usr/bin/g++
ln -sf /usr/bin/gcc-8.3.0 /usr/bin/gcc
ln -sf /usr/bin/gcc-ar-8.3.0 /usr/bin/gcc-ar
ln -sf /usr/bin/gcc-nm-8.3.0 /usr/bin/gcc-nm
ln -sf /usr/bin/gcc-ranlib-8.3.0 /usr/bin/gcc-ranlib

#ln -sf /usr/bin/gcov-8.3.0 /usr/bin/gcov # C'est installé par défaut sur mageia
#ln -sf /usr/bin/gcov-dump-8.3.0 /usr/bin/gcov-dump # C'est installé par défaut sur mageia
#ln -sf /usr/bin/gcov-tool-8.3.0 /usr/bin/gcov-tool  # C'est installé par défaut sur mageia
#ln -sf /usr/bin/gfortran-8.3.0 /usr/bin/gfortran gfortran # C'est installé par défaut sur mageia

#x86_64-pc-linux-gnu-g++ # j'ai aucune idée si je l'ai écrasé
ln -sf /usr/bin/x86_64-pc-linux-gnu-c++-8.3.0 /usr/bin/x86_64-pc-linux-gnu-c++
ln -sf /usr/bin/x86_64-pc-linux-gnu-g++-8.3.0 /usr/bin/x86_64-pc-linux-gnu-g++
ln -sf /usr/bin/x86_64-pc-linux-gnu-gcc-8.3.0 /usr/bin/x86_64-pc-linux-gnu-gcc
ln -sf /usr/bin/x86_64-pc-linux-gnu-gcc-ar-8.3.0 /usr/bin/x86_64-pc-linux-gnu-gcc-ar
ln -sf /usr/bin/x86_64-pc-linux-gnu-gcc-nm-8.3.0 /usr/bin/x86_64-pc-linux-gnu-gcc-nm
ln -sf /usr/bin/x86_64-pc-linux-gnu-gcc-ranlib-8.3.0 /usr/bin/x86_64-pc-linux-gnu-gcc-ranlib
ln -sf /usr/bin/x86_64-pc-linux-gnu-gfortran-8.3.0 /usr/bin/x86_64-pc-linux-gnu-gfortran


# les raccourcis placés dans lib64/ (si il y a besoin de faire ça c'est mauvais signe)
ln -sf /usr/lib/gcc/8.3.0/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6  # pour gcc9 la version est la 26 soit libstdc++.so.6.0.26
ln -sf /usr/lib/gcc/8.3.0/lib64/libquadmath.so.0.0.0 /usr/lib64/libquadmath.so.0
ln -sf /usr/lib/gcc/8.3.0/lib64/libquadmath.so.0.0.0 /usr/lib64/libquadmath.so
ln -sf /usr/lib/gcc/8.3.0/lib64/libgomp.so.1.0.0 /usr/lib64/libgomp.so.1
ln -sf /usr/lib/gcc/8.3.0/lib64/libcc1.so.0.0.0 /usr/lib64/libcc1.so.0
ln -sf /usr/lib/gcc/8.3.0/lib64/libcc1.so.0.0.0 /usr/lib64/libcc1.so

L’erreur qui peut arriver : /lib64/libstdc++.so.6: version ‘CXXABI_1.3.11’ not found

Le raccourcis de libstdc++.so.6 est utilisé il faut lui aussi l’éditer.

Remplacer gcc par défaut par gcc8
https://askubuntu.com/questions/1028601/install-gcc-8-only-on-ubuntu-18-04

Tester l’installation:

Je reprends les tests de ce tutorial.
Un code simple pour tester c++14:

// C++14 generalized lambda (could use "auto" for the type of a parameter)
#include

int main() {
std::cout << [](auto a, auto b) { return a + b; } (5, 6) << std::endl;
std::cout << [](auto a, auto b) { return a + b; } (5.23, 6.45) << std::endl;
return 0;
}
$ g++ --version
g++ (GCC) 8.3.0
Copyright © 2018 Free Software Foundation, Inc.
Ce logiciel est un logiciel libre; voir les sources pour les conditions de copie. Il n'y a
AUCUNE GARANTIE, pas même pour la COMMERCIALISATION ni L'ADÉQUATION À UNE TÂCHE PARTICULIÈRE.
$ g++ -Wall -pedantic test_lambda.cpp -o test_lambda
$ ./test_lambda
11
11.68

Utilisation:

Dans le cas où vous ne souhaitez pas faire pointer les symlinks sur GCC 8 (7 ou 6).

Make: (lien)

Si le makefile le permet, essayer d’appeler la commande make ainsi:

make CC=/usr/bin/gcc-8.3.0 # j'ai pas tester

CMake-gui gcc / g++:

CMake-gui x86_64-pc-linux-gnu-gcc/g++:

Codeblocks:

Désinstallation:

Restauration des «symlinks»:

ln -sf /usr/bin/c++-5.5.0 /usr/bin/c++
ln -sf /usr/bin/cpp-5.5.0 /usr/bin/cpp
ln -sf /usr/bin/g++-5.5.0 /usr/bin/g++
ln -sf /usr/bin/gcc-5.5.0 /usr/bin/gcc
ln -sf /usr/bin/gcc-ar-5.5.0 /usr/bin/gcc-ar
ln -sf /usr/bin/gcc-nm-5.5.0 /usr/bin/gcc-nm
ln -sf /usr/bin/gcc-ranlib-5.5.0 /usr/bin/gcc-ranlib
#rm /usr/bin/gcov # C'est installé par défaut sur mageia
#rm /usr/bin/gcov-dump # C'est installé par défaut sur mageia
#rm /usr/bin/gcov-tool # C'est installé par défaut sur mageia
# rm /usr/bin/gfortran gfortran # C'est installé par défaut sur mageia

rm /usr/bin/x86_64-pc-linux-gnu-c++
rm /usr/bin/x86_64-pc-linux-gnu-g++
rm /usr/bin/x86_64-pc-linux-gnu-gcc
rm /usr/bin/x86_64-pc-linux-gnu-gcc-ar
rm /usr/bin/x86_64-pc-linux-gnu-gcc-nm
rm /usr/bin/x86_64-pc-linux-gnu-gcc-ranlib
rm /usr/bin/x86_64-pc-linux-gnu-gfortran

# les raccourcis placés dans lib64/ (si il y a besoin de faire ça c'est mauvais signe)
ln -sf /usr/lib64/libstdc++.so.6.0.21 /usr/lib64/libstdc++.so.6
ln -sf /usr/lib64/libquadmath.so.0.0.0 /usr/lib64/libquadmath.so.0
ln -sf /usr/lib64/libquadmath.so.0.0.0 /usr/lib64/libquadmath.so
ln -sf /usr/lib64/libgomp.so.1.0.0 /usr/lib64/libgomp.so.1
ln -sf /usr/lib64/libcc1.so.0.0.0 /usr/lib64/libcc1.so.0
ln -sf /usr/lib64/libcc1.so.0.0.0 /usr/lib64/libcc1.so

Suppression des dossiers et fichiers de gcc:
Remplacé le suffixe «8.3.0» par la version de votre gcc.

rm /usr/bin/c++-8.3.0
rm /usr/bin/cpp-8.3.0
rm /usr/bin/g++-8.3.0
rm /usr/bin/gcc-8.3.0
rm /usr/bin/gcc-ar-8.3.0
rm /usr/bin/gcc-nm-8.3.0
rm /usr/bin/gcc-ranlib-8.3.0
rm /usr/bin/gcov-8.3.0
rm /usr/bin/gcov-dump-8.3.0
rm /usr/bin/gcov-tool-8.3.0
rm /usr/bin/gfortran-8.3.0
rm /usr/bin/x86_64-pc-linux-gnu-c++-8.3.0
rm /usr/bin/x86_64-pc-linux-gnu-g++-8.3.0
rm /usr/bin/x86_64-pc-linux-gnu-gcc-8.3.0
rm /usr/bin/x86_64-pc-linux-gnu-gcc-ar-8.3.0
rm /usr/bin/x86_64-pc-linux-gnu-gcc-nm-8.3.0
rm /usr/bin/x86_64-pc-linux-gnu-gcc-ranlib-8.3.0
rm /usr/bin/x86_64-pc-linux-gnu-gcc-tmp
rm /usr/bin/x86_64-pc-linux-gnu-gfortran-8.3.0
rm -r -d /usr/include/c++/8.3.0
rm -r -d /usr/lib/gcc/8.3.0
rm -r -d /usr/libexec/gcc/x86_64-pc-linux-gnu/8.3.0
rm -r -d /usr/share/gcc/8.3.0

echo "Manuellement vous devez éditer «~/.bashrc» pour commenter ou supprimer la ligne : export LD_LIBRARY_PATH==/usr/lib/gcc/8.3.0/lib64:$LD_LIBRARY_PATH"
echo "Attention pour gcc6 vous aurez à supprimer manuellement le dossier /usr/share/gcc-6.5.0"
suryavarman