有什么不同?clang ++ | clang -std = c ++ 11

djw*_*own 33 c c++ clang c++11 clang++

我错误地使用了这个在链接步骤失败的命令:

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

任何人都可以解释为什么clang提供了C++语言选项,以及为什么它无法链接?为什么不选择-x c++-std=c++11完成同样的事情clang++?谢谢!

Cas*_*sey 32

从技术上讲,这两个程序都没有命名clang或者clang++是编译器:它们都是分析输入参数的驱动程序,并确定哪些编译器/汇编程序/链接器使用什么命令行参数调用哪些文件.两者之间的唯一区别是,clang如果它执行链接,则仅针对C标准库的链接,而clang++针对C++和C标准库的链接.

-x=<language>选项会覆盖驱动程序的启发式方法以确定源文件语言,它会指示驱动程序<language>无论如何都要调用编译器.

-std=<dialect>选项选择您要使用的特定语言的方言.如果您需要确保您的C++程序可以移植到旧的C++ 98编译器,您可以使用它编译它-std=c++98.-std仅适用于目标语言:它不会尝试编译汇编程序或java作为C++ 98,只有驱动程序认为是C++的源文件.

简而言之,有两种不同的驱动程序可以轻松选择要链接的库.有合理的用例来编译C++但不能链接到C++标准库.