Guide de la commande c++ sous Linux : compilation et liens g++

Vue d’ensemble

Dans l’écosystème GNU/Linux, l’appel direct de la commande c++ dans le terminal suscite fréquemment des interrogations : s’agit-il d’un compilateur autonome ou d’un alias vers g++ ? Cet article décortique la mécanique interne de cet utilitaire système, met en lumière ses liens avec la suite GCC et détaille les étapes pratiques pour compiler et exécuter efficacement vos programmes C++.

Préparation de l’environnement de build et vérification de version

Afin de doter un poste de travail Ubuntu de toute la chaîne de compilation native (compilateurs C/C++, bibliothèque C standard et utilitaires make), nous déployons le métapaquet incontournable build-essential après synchronisation de l’index des dépôts :

Installation des paquets de compilation via apt-get

L’utilitaire which permet d’inspecter les répertoires du $PATH pour identifier l’emplacement exact de l’exécutable c++ pris en compte par votre interpréteur :

Vérification du chemin de l’exécutable avec which c++

L’option d’interrogation de version (c++ --version) dévoile les détails de construction du compilateur sous-jacent ainsi que la révision active de GCC.

⚙️ [Options de compilation fondamentales]

-o <file> : Définit le nom et l’emplacement du binaire exécutable généré après l’édition de liens.
-c : Interrompt le processus après la génération du fichier objet (.o), sans déclencher l’éditeur de liens.
-Wall : Active la plupart des avertissements recommandés afin de repérer les anomalies potentielles dans le code.
-O2 : Applique un compromis d’optimisation robuste garantissant d’excellentes performances d’exécution sans surcoût excessif sur la taille du binaire.
-std=<standard> : Spécifie expressément la norme de langage C++ ciblée (par exemple c++17 ou c++20).
-g : Intègre les symboles de débogage pour faciliter l’analyse pas à pas dans GDB.

Affichage de la version du compilateur C++

Architecture des liens symboliques : anatomie de /usr/bin/c++ face à g++

L’examen détaillé des métadonnées de /usr/bin/c++ à l’aide de ls -l met en évidence la structure de redirection sous-jacente propre aux distributions Debian et Ubuntu :

Inspection du lien symbolique /usr/bin/c++

Pour déterminer vers quel binaire physique converge cet alias, l’inspection du système d’alternatives ou la résolution canonique via readlink -f expose la cible finale du compilateur (généralement une version précise de g++) :

Résolution de la cible réelle avec update-alternatives et readlink

Création d’un premier programme, compilation et exécution

Mettons en pratique la chaîne d’outils en écrivant un fichier source minimal hello.cpp destiné à tester le flux de sortie standard :

Écriture du fichier source hello.cpp

Nous invoquons à présent le compilateur c++ en combinant l’optimisation et la détection d’anomalies de code pour générer le binaire hello. Conformément à la philosophie Unix, l’absence de message en retour confirme le succès de l’opération :

Compilation avec c++ en activant les avertissements et l’optimisation

Il ne reste plus qu’à lancer le fichier exécutable fraîchement produit au sein du répertoire courant afin de valider la restitution du texte sur le terminal :

Exécution du binaire hello

Compilation moderne avec le standard C++20 (-std=c++20)

Afin d’illustrer la prise en charge des spécifications modernes du langage, nous rédigeons un script modern.cpp tirant parti de std::string_view et de l’évaluation à la compilation permise par constexpr :

Création d’un code C++ moderne avec string_view

Le drapeau -std=c++20 indique au moteur de compilation d’activer les règles grammaticales de cette norme. La commande produit l’exécutable modern sans avertissement si le code respecte scrupuleusement le standard :

Compilation en spécifiant le standard C++20

L’exécution immédiate du binaire produit permet de vérifier la conformité du comportement attendu dans l’environnement Ubuntu :

Exécution du programme compilé en C++20

Vous disposez désormais d’une vision claire sur le rôle de la commande c++, son articulation avec g++ et les méthodes de compilation fondamentales sous Linux. En combinant judicieusement ces options de base, vous serez en mesure de structurer des environnements de build C++ fiables et performants.