如何使用Clang编译C++
How do I compile C++ with Clang?
我在Ubuntu中使用apt-get安装了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++。看看这个post以检查-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版本:11.0.0
- 平台:Ubuntu 16.04
此外,为了子孙后代——Clang(像GCC一样)接受-x
开关来设置输入文件的语言,例如
$ clang -x c++ some_random_file.txt
这个邮件列表线程很好地解释了clang
和clang++
之间的区别:clang和clang++之间的区别
解决方案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<…>搜索从这里开始:"下。
打开一个终端窗口并导航到您的项目目录。根据安装的编译器运行以下命令集:
使用clang++编译多个C++文件:
$ clang++ *.cpp
$ ./a.out
使用g++编译多个C++文件:
$ g++ -c *.cpp
$ g++ -o temp.exe *.o
$ ./temp.exe