如何使用Clang编译C ++?


97

我已经在Ubuntu中使用apt-get 安装了Clang,并且可以使用它成功编译C文件。但是,我不知道如何通过它编译C ++。我需要做什么来编译C ++?

Answers:


148

该命令clang用于C,该命令clang++用于C ++。


48

此外,对于后代来说,Clang(例如GCC)接受此-x开关来设置输入文件的语言,例如,

$ clang -x c++ some_random_file.txt

此邮件列表线程解释了clang和之间的区别clang++clang和clang ++之间的区别


4
使用编译cpp文件时,我在clang -x c ++中遇到了链接器错误#include <iostream>-lstdc ++标志解决了此问题。
斯拉夫2015年

1
现在我眼中有了Clang的源代码。在构建过程中(在Windows上),它首先构建clang.exe,然后将该可执行文件复制到中clang++.exe。因此,它是同一个可执行文件,只是在运行时它会检查自己的名称以区分是充当C还是C ++编译器。HTH。
Serge Rogatch

作为一个说明,该选项-x c++是非常有用的,得到为-extra-arg铛-整齐,以迫使它来治疗.h文件作为含有C ++代替C的
信息n

除非您从源代码构建整个东西,否则这太过局限了而无法实际使用。最好只使用clang++并让它检测您提供给它的文件类型。当一个项目可以包含.cpp的文件,.ll文件(LLVM IR)和.o.a.so从第三方库并没有什么文件,clang -x c++将刚扔了。
Sahsahae,

47

我不知道为什么没有直接解决问题的答案。当您要编译C ++程序时,最好使用clang++。例如,以下内容对我有用:

clang++ -Wall -std=c++11 test.cc -o test

如果编译正确,它将生成可执行文件test,您可以使用运行文件./test

或者您可以只使用clang++ test.cc编译程序。它将产生一个名为的默认可执行文件a.out。使用./a.out运行该文件。

如果您熟悉g ++,则整个过程与g ++非常相似。请参阅此帖子,以检查-Wall选项中包含哪些警告。此页面显示了Clang支持的诊断标志的列表。


4
感谢您实际回答问题。
Curyous

4

从源代码构建Clang时,我遇到过类似的问题(但不是sudo apt-get install。这可能取决于您正在运行的Ubuntu版本)。

可能值得检查是否clang++可以找到C ++库的正确位置:

比较的结果g++ -v <filename.cpp>clang++ -v <filename.cpp>,在“这里的#include <...>开始搜索”。


0

解决方案1:

  clang++ your.cpp

解决方案2:

  clang your.cpp -lstdc++

解决方案3:

   clang -x c++ your.cpp 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.