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!
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++.
Clang est le nom de l'ensemble du compilateur.
Cependant, du point de vue de la ligne de commande:
L'option -std = c ++ 11 active la nouvelle norme C++ 11 (comme dans g ++).