web-dev-qa-db-fra.com

Compiler un programme C ++ avec gcc

Question: Comment compiler un programme C++ avec le compilateur gcc?

info.c:

#include<iostream>
using std::cout;
using std::endl;
int main()
{
   #ifdef __cplusplus
   cout << "C++ compiler in use and version is " << __cplusplus << endl;
   #endif
   cout <<"Version is " << __STDC_VERSION__ << endl;
   cout << "Hi" << __FILE__ << __LINE__ << endl;
}

et quand j'essaye de compiler info.c

$ gcc info.C

Undefined                       first referenced
 symbol                             in file
cout                                /var/tmp/ccPxLN2a.o
endl(ostream &)                     /var/tmp/ccPxLN2a.o
ostream::operator<<(ostream &(*)(ostream &))/var/tmp/ccPxLN2a.o
ostream::operator<<(int)            /var/tmp/ccPxLN2a.o
ostream::operator<<(long)           /var/tmp/ccPxLN2a.o
ostream::operator<<(char const *)   /var/tmp/ccPxLN2a.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status

Le compilateur gcc n’est-il pas capable de compiler des programmes C++? Sur une note connexe, quelle est la différence entre gcc et g ++. Merci,

62
xyz

gcc peut compiler le code c ++ très bien. Les erreurs que vous avez reçues sont des erreurs de l'éditeur de liens et non des erreurs du compilateur.

Les chances sont que si vous modifiez la ligne de compilation pour être ceci:

gcc info.C -lstdc++

ce qui en fait un lien vers la bibliothèque standard c ++, alors cela fonctionnera parfaitement.

Cependant, vous devriez simplement vous simplifier la vie et utiliser g ++.


EDIT:

Rup le dit le mieux en son commentaire à une autre réponse:

[...] gcc sélectionnera le compilateur back-end approprié en fonction de l'extension de fichier (c.-à-d. compilera un fichier .c en tant que C et un fichier .cc en tant que C++) et liera les fichiers binaires à la bibliothèque d'assistance standard C et GCC par défaut, indépendamment de langues d'entrée; g ++ sélectionnera également le bon back-end en fonction de son extension, sauf que je pense qu'il compile toutes les sources C en C++ (c'est-à-dire qu'il compile les fichiers .c et .cc en C++) et qu'il inclut libstdc ++ dans son étape de lien, quels que soient les langages de saisie.

107
Evan Teran

Si vous attribuez au code une extension .c, le compilateur pense qu'il s'agit de code C, pas de C++. Et le pilote du compilateur C++ s'appelle g ++. Si vous utilisez le pilote gcc, vous aurez des problèmes d’éditeur de liens, car les bibliothèques C++ standard ne seront pas liées par défaut. Alors vous voulez:

g++ myprog.cpp

Et n’envisagez même pas d’utiliser une extension .C en majuscule, à moins que vous ne vouliez jamais transférer votre code et soyez prêt à être détesté par ceux avec qui vous travaillez.

40
anon

utilisation g++ au lieu de gcc.

19
Alexandre C.

La différence entre gcc et g ++ sont:

     gcc            |        g++
compiles c source   |   compiles c++ source

utilisez g ++ au lieu de gcc pour compiler votre source c ++.

10
Praveen S

Par défaut, gcc sélectionne la langue en fonction de l'extension de fichier, mais vous pouvez forcer gcc à sélectionner un autre backend de langue avec l'option -x de la manière suivante:

gcc -x c++

Plus d’options sont détaillées dans la page de manuel gcc sous "Options contrôlant le type de sortie". Voir par exemple http://linux.die.net/man/1/gcc (recherchez le texte -x language dans la page.).

Cette fonctionnalité est très utile dans les cas où gcc ne peut pas deviner la langue en utilisant une extension de fichier, par exemple si vous générez du code et le transmettez à gcc via stdin.

7
bleater

Ça a bien marché pour moi. Juste un code de ligne dans cmd.

Tout d’abord, confirmez que vous avez installé le compilateur gcc (pour c) ou g ++ (pour c ++).

En cmd pour le type gcc:

gcc --version

en cmd pour le type g ++:

g ++ --version

S'il est installé, continuez.

Maintenant, compilez votre .c ou .cpp en utilisant cmd

pour . c syntaxe:

gcc -o exe_filename votre nomfichier.c

Exemple:

gcc -o myfile myfile.c

Ici exe_filename (myfile dans l'exemple) est le nom de votre fichier .exe que vous voulez produire après la compilation (Note: je n'ai mis aucune extension ici). Et votrefichier.c (monfichier.c dans l'exemple) est le votre fichier source qui porte l'extension .c.

Maintenant, allez dans le dossier contenant votre fichier .c, vous trouverez ici un fichier avec l'extension .exe. Ouvrez-le. Hourra..

Pour . Cpp syntaxe:

g ++ -o exe_filename votrefichier.cpp

Ensuite, le processus est le même que pour .c.

2
Rajkumar Bansal

Si je me souviens bien, gcc détermine le type de fichier à partir du suffixe. Alors, faites-le foo.cc et cela devrait fonctionner.

Et, pour répondre à votre autre question, that est la différence entre "gcc" et "g ++". gcc est une interface qui choisit le bon compilateur.

1
Borealid