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

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

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

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

从技术上讲,名为clangclang++的程序都不是编译器:它们都是分析输入参数的驱动程序 ,并确定哪些编译器/汇编器/链接器使用什么命令行参数调用哪些文件。 两者之间的唯一区别是,如果它执行链接,则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 ++)。