1127 votes

Quelle est la différence entre g++ et gcc ?

Quelle est la différence entre g++ et gcc ? Lequel d'entre eux doit être utilisé pour le développement général de c++ ?

910voto

gcc y g++ sont des pilotes de compilateur du compilateur GNU. Collection (qui était autrefois juste le GNU Compilateur C ).

Même s'ils déterminent automatiquement quels backends ( cc1 cc1plus ...) à appeler en fonction du type de fichier, sauf s'il est surchargé par le paramètre -x language ils ont quelques différences.

La différence la plus importante dans leurs valeurs par défaut est probablement le choix des bibliothèques auxquelles ils se lient automatiquement.

Selon la documentation en ligne de GCC options de liens y comment g++ est invoqué , g++ est équivalent à gcc -xc++ -lstdc++ -shared-libgcc (la première est une option du compilateur, les deux autres sont des options de l'éditeur de liens). Ceci peut être vérifié en exécutant les deux avec l'option -v (elle affiche les commandes de la chaîne d'outils dorsale en cours d'exécution).

58 votes

De cette réponse, je conclus que la commande g++ est en fait juste gcc avec un tas de drapeaux Pourquoi alors, il y a deux binaires différents (d'approximativement la même taille) pour gcc et g++ dans linux ? Ne devrions-nous pas avoir un seul binaire et un lien symbolique (ou quelque chose de ce genre) ?

32 votes

@Uchihaltachi ces fichiers sont des liens durs et lorsqu'ils sont démarrés ils vérifient argv[0] pour savoir quelle invocation doit être utilisée. Ceci est assez commun parmi les utilitaires UNIX de base.

10 votes

Où est-il dit que g++ is equivalent to gcc -xc++ -lstdc++ -shared-libgcc dans les documents ? Elle dit seulement qu'elle traite les fichiers .c, .h et .i comme du C++ et lie automatiquement libstdc++. Si la commande postée était le cas, un fichier .txt avec du code C++ valide devrait être compilé mais renvoie une erreur de format de fichier non supporté.

554voto

Loki Astari Points 116129

GCC : Collection de compilateurs GNU

  • Référents à tous les différents langages supportés par le compilateur GNU.

gcc : Compilateur GNU C
g++ : Compilateur GNU C++

Les principales différences :

  1. gcc sera compilé : *.c\*.cpp en tant que C et C++ respectivement.
  2. g++ sera compilé : *.c\*.cpp mais ils seront tous traités comme des fichiers C++.
  3. Aussi, si vous utilisez g++ pour lier les fichiers objets, il lie automatiquement les bibliothèques std C++ ( gcc ne le fait pas).
  4. gcc La compilation des fichiers C comporte moins de macros prédéfinies.
  5. gcc compilation de *.cpp y g++ compilation de *.c\*.cpp a quelques macros supplémentaires.

Macros supplémentaires lors de la compilation *.cpp des fichiers :

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern

50 votes

Vous pouvez lier la bibliothèque C++ std en gcc en passant -lstdc++ paramètre.

27 votes

Il y a plus de différences entre 'gcc' et 'g++' que les seules bibliothèques standard, donc gcc -lstdc++ ne vous donnera toujours pas le même comportement que g++ . Ce n'est pas pour rien que nous avons placé tout ce comportement spécifique à la langue dans son propre pilote, c'est pour cela qu'il est là :-)

11 votes

Mon commentaire ne parle pas seulement des liens... c'est le but. Même en limitant la discussion aux liens (ce qui n'était pas le cas dans votre réponse), un utilisateur toujours ne pourra pas utiliser l'ensemble de la bibliothèque standard C++ en spécifiant seulement -lstdc++ car il manquera des dépendances sur les mathématiques, le RTTI et les informations sur les exceptions. Le fait qu'un cas de test donné soit lié ou échoue dépendra du système d'exploitation et des fonctionnalités C++ utilisées par le cas de test, ce qui explique pourquoi toutes ces connaissances sont intégrées dans le pilote g++ au lieu d'être laissées à la charge de l'utilisateur.

113voto

Nils Pipenbrinck Points 41006

Pour c++, vous devez utiliser g++.

Il s'agit du même compilateur (par exemple, la collection de compilateurs GNU). GCC ou G++ choisissent simplement un front-end différent avec des options par défaut différentes.

En bref : si vous utilisez g++, le frontal indiquera à l'éditeur de liens que vous pouvez vouloir lier avec les bibliothèques standard C++. Le frontal gcc ne le fera pas (même s'il peut le faire si vous passez les bonnes options de ligne de commande).

6 votes

+1 La page de manuel de gcc de GNU/Linux dit également : "Lorsque vous compilez des programmes C++, vous devriez invoquer GCC en tant que g++ à la place."

58voto

l --marc l Points 3606

Quelle est la différence entre g++ y gcc ?

gcc a évolué d'un langage unique "Compilateur GNU C" à une "Collection de compilateurs GNU" multi-langues. Le terme gcc peut encore parfois se référer au "compilateur GNU C" dans le contexte de la programmation C.

man gcc

# GCC(1)                     GNU
# 
# NAME
#        gcc - GNU project C and C++ compiler

Cependant, g++ es le compilateur C++ de la collection de compilateurs GNU. Comme gnat est le compilateur Ada pour gcc . Voir Utilisation de la collection de compilateurs GNU (GCC).

Par exemple, les versions 16.04 et 18.04 d'Ubuntu man g++ renvoie le GCC(1) page du manuel.

Les versions 16.04 et 18.04 d'Ubuntu man gcc déclare que...

g++ accepte principalement les mêmes options que gcc

et que le défaut ...

... l'utilisation de gcc n'ajoute pas la bibliothèque C++. g++ est un programme qui appelle GCC et spécifie automatiquement la liaison avec la bibliothèque C++. bibliothèque. Il traite les fichiers .c, .h et .i comme des fichiers sources C++ au lieu de fichiers sources C, sauf si le paramètre -x est utilisé. C, sauf si -x est utilisé. Ce programme est également utile lorsque précompiler un fichier d'en-tête C avec une extension .h pour l'utiliser dans les compilations dans les compilations C++.

Recherchez le gcc pour plus de détails sur les variations d'options entre les systèmes d'exploitation et les systèmes de gestion de l'information. gcc y g++ .

Lequel doit être utilisé pour le développement général en C++ ?

Techniquement, soit gcc o g++ peut être utilisé pour le développement général de C++ avec les paramètres d'option applicables. Cependant, le g++ Le comportement par défaut est naturellement aligné sur un développement C++.

El Page de manuel "gcc" d'Ubuntu 18.04 ajouté, et Ubuntu 20.04 continue à avoir, le paragraphe suivant :

La manière habituelle d'exécuter GCC est de lancer l'exécutable appelé gcc ou machine-gcc lors de la compilation croisée, ou machine-gcc-version pour exécuter une version spécifique de GCC. Lorsque vous compilez des programmes C++, vous devez invoquer GCC en tant que g++ à la place.


Remarque : Dans le cas de la chaîne d'outils embarquée Xcode.app, g++ simplement des liens vers gcc . Así, g++ peuvent varier en fonction des chaînes d'outils.

ls -l /Applications/Xcode.app/Contents/Developer/usr/bin
# …
# lrwxr-xr-x  1 root  wheel         3 Apr 27  2021 g++ -> gcc
# -rwxr-xr-x  1 root  wheel    167120 Nov 23 20:51 gcc

### -- versus --
which -a g++
# /usr/bin/g++
ls -l /usr/bin/g++
# -rwxr-xr-x  1 root  wheel  137616 Jan  1  2020 /usr/bin/g++

30voto

njsf Points 1896

Une différence notable est que si vous passez un .c à gcc, il sera compilé en C.

Le comportement par défaut de g++ est de traiter .c en tant que C++ (sauf si -x c est spécifié).

24 votes

(En retard, mais pour la postérité,) Comme d'autres réponses l'ont souligné, ce n'est en aucun cas "la seule différence notable", à moins que le lecteur ait une définition biaisée de la notabilité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X