web-dev-qa-db-fra.com

Quelle est la différence? clang ++ | clang -std = c ++ 11

J'avais utilisé par erreur cette commande, qui a échoué à l'étape du lien:

$ clang -std=c++11 -stdlib=libc++ myInputFile.cpp

Quelqu'un peut-il expliquer pourquoi clang fournit une option de langage C++ et pourquoi elle ne parvient pas à se lier? Pourquoi les options -x c++ ou -std=c++11 accomplit la même chose que clang++? Merci!

33
djwbrown

Techniquement, aucun des programmes nommés clang ou clang++ est un compilateur: ce sont tous les deux drivers qui analysent les arguments d'entrée et déterminent quels compilateurs/assembleurs/linkers invoquer sur quels fichiers avec quels arguments de ligne de commande. La seule différence entre les deux est que clang lie uniquement à la bibliothèque standard C si elle effectue un lien, tandis que clang++ liens vers les bibliothèques standard C++ et C.

Le -x=<language> L'option remplace les heuristiques des programmes de pilote pour déterminer la langue du fichier source, elle demande au pilote d'appeler le compilateur pour <language> indépendamment.

Le -std=<dialect> L'option sélectionne le dialecte d'une langue particulière que vous souhaitez utiliser. Si vous devez vous assurer que votre programme C++ est portable sur un ancien compilateur C++ 98, vous pouvez le compiler avec -std=c++98. -std ne s'applique qu'à la langue cible: il n'essaiera pas de compiler, par exemple assembleur ou Java en C++ 98, seuls les fichiers sources que le pilote pense être C++.

En bref, il existe deux programmes de pilotes différents pour vous permettre de sélectionner facilement les bibliothèques sur lesquelles établir un lien. Il existe des cas d'utilisation raisonnables pour la compilation de C++ mais pas pour la liaison avec la bibliothèque standard C++.

32
Casey

Clang est le nom de l'ensemble du compilateur.

Cependant, du point de vue de la ligne de commande:

  • Clang est le compilateur C
  • Clang ++ est le compilateur C++ (comme g ++ est un compilateur C++, alors que gcc est un compilateur C)

L'option -std = c ++ 11 active la nouvelle norme C++ 11 (comme dans g ++).

3
Claudio