有什么不同? clang ++ | clang -std = c ++ 11
我错误地使用了这个在链接步骤失败的命令:
$ clang -std=c++11 -stdlib=libc++ myInputFile.cpp
任何人都可以解释为什么clang提供了C ++语言选项,以及为什么它无法链接? 为什么选项-x c++
或-std=c++11
完成与clang++
相同的操作? 谢谢!
从技术上讲,名为clang
或clang++
的程序都不是编译器:它们都是分析输入参数的驱动程序 ,并确定哪些编译器/汇编器/链接器使用什么命令行参数调用哪些文件。 两者之间的唯一区别是,如果它执行链接,则clang++
链接仅针对C标准库,而clang++
链接针对C ++和C标准库。
-x=
选项会覆盖驱动程序的启发式方法以确定源文件语言,它会指示驱动程序调用
的编译器。
-std=
选项选择您要使用的特定语言的方言。 如果需要确保C ++程序可以移植到旧的C ++ 98编译器,可以使用-std=c++98
进行编译。 -std
仅适用于目标语言:它不会尝试编译汇编程序或java作为C ++ 98,只有驱动程序认为是C ++的源文件。
简而言之,有两种不同的驱动程序可以轻松选择要链接的库。 编译C ++有合理的用例,但没有链接到C ++标准库。
Clang是整个编译器的名称。
但是,从命令行的角度来看:
- Clang是C编译器
- Clang ++是C ++编译器(就像g ++是C ++编译器,而gcc是C编译器)
-std = c ++ 11选项启用新的C ++ 11标准(如g ++)。