Comment compiler C ++ avec Clang?

97

J'ai installé Clang en utilisant apt-get dans Ubuntu, et je peux réussir à compiler des fichiers C en l'utilisant. Cependant, je ne sais pas comment compiler C ++ à travers lui. Que dois-je faire pour compiler C ++?

pythonique
la source

Réponses:

148

La commande clangest pour C et la commande clang++est pour C ++.

adl
la source
48

Aussi, pour la postérité - Clang (comme GCC) accepte le -xcommutateur pour définir la langue des fichiers d'entrée, par exemple,

$ clang -x c++ some_random_file.txt

Ce fil de discussion de liste de diffusion explique la différence entre clanget clang++bien: Différence entre clang et clang ++

Kim Gräsman
la source
4
J'ai eu une erreur de l'éditeur de liens avec clang -x c ++ lors de la compilation du fichier cpp avec #include <iostream>. L'indicateur -lstdc ++ a résolu ce problème.
Slav
1
J'ai le code source de Clang devant mes yeux maintenant. Pendant la génération (sous Windows), il génère d'abord clang.exe, puis copie cet exécutable dans clang++.exe. C'est donc le même exécutable, juste au moment de l'exécution, il vérifie son propre nom pour distinguer s'il doit se comporter comme un compilateur C ou C ++. HTH.
Serge Rogatch
Comme une note, l'option -x c++a été très utile pour donner comme -extra-argà clang-propre , pour l'obliger à traiter un fichier .h comme contenant C ++ au lieu de C.
Annonce N
C'est trop limitatif pour être réellement utile à moins que vous ne construisiez un élément entier à partir des sources. Il est préférable de simplement l'utiliser clang++et de le laisser détecter le type de fichiers que vous lui fournissez. Lorsqu'un projet peut contenir des .cppfichiers, des .llfichiers (LLVM ir) et .o, .a, .soet ce pas les fichiers de bibliothèques tierces, clang -x c++va simplement jeter.
Sahsahae
47

Je ne sais pas pourquoi il n'y a pas de réponse directement au problème. Lorsque vous souhaitez compiler un programme C ++, il est préférable d'utiliser clang++. Par exemple, ce qui suit fonctionne pour moi:

clang++ -Wall -std=c++11 test.cc -o test

S'il est compilé correctement, il produira le fichier exécutable testet vous pouvez exécuter le fichier en utilisant ./test.

Ou vous pouvez simplement utiliser clang++ test.ccpour compiler le programme. Il produira un fichier exécutable par défaut nommé a.out. Utilisez ./a.outpour exécuter le fichier.

L'ensemble du processus ressemble beaucoup à g ++ si vous êtes familier avec g ++. Consultez cet article pour vérifier quels avertissements sont inclus avec l' -Walloption. Cette page affiche une liste des indicateurs de diagnostic pris en charge par Clang.

jdhao
la source
4
Merci d'avoir répondu à la question.
Curyous
4

J'ai eu un problème similaire lors de la construction de Clang à partir des sources (mais pas avec sudo apt-get install. Cela peut dépendre de la version d'Ubuntu que vous utilisez).

Il peut être utile de vérifier si vous clang++pouvez trouver les emplacements corrects de vos bibliothèques C ++:

Comparez les résultats de g++ -v <filename.cpp> et clang++ -v <filename.cpp>, sous "#include <...> la recherche commence ici:".

Guy Adini
la source
0

solution 1:

  clang++ your.cpp

solution 2:

  clang your.cpp -lstdc++

solution 3:

   clang -x c++ your.cpp 
ligand
la source