GCC Installeren

Installeer de GNU Compiler Collection vanaf de broncode

De huidige stabiele versie van gcc is 10.2 helaas voldoet deze versie niet aan de vereisten om nieuwe functies uit de C++20 standaard te gebruiken (oa. modules worden niet ondersteund).

Willen we gebruik maken van deze nieuwe faciliteiten (en dat willen we, want modules zijn een lang verwachte vervanging voor de verouderde #include headers). Je kunt zeggen dat deze modules van C++ een moderne programmeertaal maken.

Stap 1 van de installatie van gcc 11 is het downloaden van de broncode vanaf de website van het gcc project. Klik op deze site op Mirrors onder de optie Download en kies een "spiegelserver" waarvan je wil downloaden.

Note: Let wel op dat er bij de mirror niet de tekst (no snapshots) staat, want we willen nu net zo'n snapshot downloaden (tenzij je dit leest als gcc 11 al als stable is uitgegeven, maar dan is deze versie mischien ook al beschikbaar in de pakketbeheerder van je Linux distributie en kun je beter via die weg de compiler installeren.

Als voorbeeld maak ik hier gebruik van een server in Duitsland: ftp://ftp.mpi-sb.mpg.de/pub/gnu/mirror/gcc.gnu.org/pub/gcc/snapshots/LATEST-11

Deze link verwijst altijd naar de laatste snapshot van versie 11 van de compiler. van deze server downloaden we het .tar.zx bestand (momenteel is dat gcc-11-20201227.tar.xz deze snapshots worden wekelijk gemaakt dus de versie die op de server staat op het moment dat je dit leest zal waarschijnlijk niet meer dezelfde zijn.

Zorg er wél voor dat je minstens deze versie (27 december 2020) hebt, want de vorige versies zullen niet werken.

Stap 2 na het downloaden van het bestand moeten we het uitpakken. Maar eerst gaan we controleren of het gedownloade bestand correct gedownload is.

Hiervoor download je het bestand met de naam sha512.sum

Dan vanuit de directory waar je gcc en sha512.sum gedownload hebt geef je het commando: sha512sum --ignore-missing -c sha512.sum

Als de uitvoer van dit commando gcc-11-20201227.tar.xz: OK is dan is het bestand correct gedownload en kunnen we het uitpakken met tar xf gcc-11-20201227.tar.xz

ga nu in de aangemaakte directory cd gcc-11-20201227

maak een tijdelijke build directory aan, deze kan een willekeurige naam hebben, maar build is duidelijk: mkdir build

Ga deze directory binnen: cd build

Stap 3 Nu moeten we het configure script uitvoeren: ../configure --prefix=/opt/gcc-11 --disable-multilib
  • --prefix=/opt/gcc-11 geeft aan in welke directory we gcc-11 willen installeren (als je geen beheerdersrechten hebt, of als je enkel wil installeren voor jouw gebruikersaccount kun je hier bijvoorbeeld ook ~/gcc-11 ingeven.
  • --disable-multilib geeft aan dat ik enkel x86_64 (64-bit) ondersteuning wil

Als deze stap foutmeldingen geeft is het mogelijk dat je enkele dependencies niet op je systeem hebt staan. In mijn gaval zijn dat de volgende programma's:

  • libgmp-dev
  • libmpfr-dev
  • libmpc-dev
  • flex

Op mijn Debian systeem installeer ik die met het commando: sudo apt install libgmp-dev libmpfr-dev libmpc-dev flex

Natuurlijk heb je ook een geïnstalleerde versie van gcc nodig. Meestal krijg je de nodige pakketten met het commando sudo apt install build-essential (bij Debian of op Debian gebaseerde systemen zoals Ubuntu of Linux Mint).

Stap 4 ga met de hond wandelen ;-)

Bij stap 4 gaan we de compiler compileren, en dat kan héél lang duren (oa. afhankelijk van je processor en het aantal cores dat deze heeft.

Om te compileren gebruiken we het commando: make -j # waarbij je # vervangt door het aantal cores dat je processor heeft (of het dubbel hiervan, want de meningen hierover verschillen).

Op mijn hoofdsysteem gebruik ik bijvoorbeeld het commando: make -j 32 (mijn CPU heeft 16 cores) en ga ik daarna rustig een kopje koffie drinken.

Nadeel van deze methode is dat andere programma's langzamer worden want op bepaalde momenten worden alle cores voor 100% belast.

Gebruik je deze optie niet dan zal make slechts 1 thread gebruiken (dus ook maar 1 CPU core) waardoor het systeem minder belast wordt, maar het compileren zal dan wel veel langer duren.

Stap 5 Als er geen foutmeldingen komen na het uitvoeren van het make commando is de compiler klaar om geïnstalleerd te worden.

Als je ervoor hebt gekozen om net zoals ik te installeren in /opt/gcc-11 moet je het sudo commando gebruiken, als je het in je eigen $HOME (~) directory wil installeren ik sudo niet nodig.

het commando voor de installatie is: sudo make install (of make install).

Als dit zonder foutmeldingen eindigt heb je met success de nieuwste snapshot van gcc 11 geïnstalleerd.

Deze zal niet standaard gebruikt worden (wat goed is, want deze versie bevat nog veel fouten/bugs), maar je kunt hem manueel aanroepen met /opt/gcc-11/bin/g++ of je kunt ervoor kiezen om gebruik te maken van het programma update-alternatives, hiermee kun je snel schakelen tussen bijvoorbeeld gcc-10 en gcc-11.

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10

sudo update-alternatives --install /usr/bin/g++ g++ /opt/gcc-11/bin/g++-11 11

Hierna kunnen we snel schakelen tussen deze 2 versies met:

sudo update-alternatives --config g++

Figure 1. sudo update-alternatives --config g++
sudo update-alternatives --config g++

Zoals je op bovenstaande schermafbeelding kunt zien heb ik 3 verschillende versies van g++ geïnstalleerd, versies 9 en 10 via de pakketbeheerder van mijn distributie en versie 11 manueel in /opt/gcc-11.

Je kunt ook zien dat gcc-11 de hoogste prioriteit is, dat deze automatisch als standaard gebruikt wordt. Om een andere versie van de compiler te kiezen geef ik gewoon het getal van de compiler die ik wil gebruiken in (bijvoorbeeld 2 voor g++ versie 10). en druik op enter.