如何用 Clang 编译 C + + ?

我在 Ubuntu 中使用 apt-get 安装了 ,我可以用它成功地编译 C 文件。然而,我不知道如何通过它来编译 C + + 。要编译 C + + 我需要做什么?

177168 次浏览

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

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

如果 clang++能够找到您的 C + + 库的正确位置,那么可能值得检查一下:

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

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

$ clang -x c++ some_random_file.txt

这个邮件列表线程很好地解释了 clangclang++之间的区别: Clang 和 clang 之间的区别

I do not know why there is no answer directly addressing the problem. When you want to compile C++ program, it is best to use clang++, instead of using clang. For example, the following works for me:

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

If compiled correctly, it will produce the executable file test, and you can run the file by using ./test.

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

The whole process is a lot like g++ if you are familiar with g++. See this post to check which warnings are included with -Wall option. This Page 显示 Clang 支持的诊断标志列表

A note on using clang -x c++: Kim Gräsman says that you can also use 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 will compile successfully, but clang -x c++ will 没有,显示了许多未定义的引用错误。所以我猜它们并不完全等价。在编写 c + + 程序时,最好使用 clang++代替 clang -x c++,以免造成额外的麻烦。

  • clang version: 11.0.0
  • 平台: Ubuntu 16.04

解决方案1:

  clang++ your.cpp

解决方案2:

  clang your.cpp -lstdc++

解决方案3:

   clang -x c++ your.cpp

打开“终端”窗口并导航到项目目录。根据所安装的编译器,运行以下命令集:

使用 clang + + 编译多个 C + + 文件:

$ clang++ *.cpp
$ ./a.out

使用 g + + 编译多个 C + + 文件:

$ g++ -c *.cpp
$ g++ -o temp.exe *.o
$ ./temp.exe