我已经使用apt-get在Ubuntu上安装了Clang,并且可以成功地使用它编译C文件。然而,我不知道如何通过它来编译C++。我需要做什么来编译C++?
clang
命令用于 C 语言,而 clang++
命令用于 C++ 语言。
我不知道为什么没有直接解决问题的答案。当你想编译C++程序时,最好使用clang++
,而不是使用clang
。例如,以下代码适用于我:
clang++ -Wall -std=c++11 test.cc -o test
如果编译正确,它将产生可执行文件test
,您可以使用./test
运行该文件。
或者您可以直接使用clang++ test.cc
来编译程序。它将生成一个名为a.out
的默认可执行文件。使用./a.out
来运行该文件。
整个过程很像g++,如果您熟悉g++的话。请参见这篇文章以查看包含在-Wall
选项中的警告列表。此页面列出了Clang支持的一系列诊断标志。
关于使用clang -x c++
:Kim Gräsman说您也可以使用clang -x c++
来编译CPP程序,但这可能并不总是可行的。例如,我有一个简单的程序如下:
#include <iostream>
#include <vector>
int main() {
/* std::vector<int> v = {1, 2, 3, 4, 5}; */
std::vector<int> v(10, 5);
int sum = 0;
for (int i = 0; i < v.size(); i++){
sum += v[i]*2;
}
std::cout << "sum is " << sum << std::endl;
return 0;
}
clang++ test.cc -o test
可以成功编译,但 clang -x c++
不能,会显示许多未定义的引用错误。因此,我认为它们并不完全等价。在编译C++程序时最好使用 clang++
而不是 clang -x c++
,以避免额外的麻烦。
此外,为了后代记录——Clang(像GCC一样)接受-x
开关来设置输入文件的语言,例如:
$ clang -x c++ some_random_file.txt
这个邮件列表线程很好地解释了clang
和clang++
之间的区别:Difference between clang and clang++
clang.exe
,然后将该可执行文件复制到clang++.exe
中。因此,它是相同的可执行文件,只是在运行时检查自己的名称以区分是作为C还是C++编译器运行。希望对你有所帮助。 - Serge Rogatchclang++
并让它检测您提供给它的文件类型。 当一个项目可以包含 .cpp
文件、.ll
文件(llvm ir)以及第三方库的 .o
、.a
、.so
和其他文件时,clang -x c++
就会变得很混乱。 - user11877195clang++
可以工作,但是clang -x c++
会显示很多未定义引用错误(其他标志相同)。所以我想最好使用clang++
。测试过的clang版本为:11.0.0。 - jdhao解决方案1:
clang++ your.cpp
解决方案2:
clang your.cpp -lstdc++
解决方案3:
clang -x c++ your.cpp
我曾经在从源代码构建Clang时遇到类似的问题(但在使用sudo apt-get install
时没有出现这种情况。这可能取决于您正在运行的Ubuntu版本)。
值得检查的是clang++
是否能找到您的C++库的正确位置:
比较g++ -v <filename.cpp>
和clang++ -v <filename.cpp>
的结果,在“#include < ... > search starts here:”下面。
打开终端窗口并导航至您的项目目录。 根据您安装的编译器运行以下命令组合:
使用clang++编译多个C++文件:
$ clang++ *.cpp
$ ./a.out
使用g++编译多个C++文件的方法:
$ g++ -c *.cpp
$ g++ -o temp.exe *.o
$ ./temp.exe
g++
呢? - Mr.Robotclang++
,而不是使用clang
,并非与使用g++
相比较。 - jdhao