如何使用Clang编译C++

How do I compile C++ with Clang?

本文关键字:C++ 编译 Clang 何使用      更新时间:2023-10-16

我在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

这个邮件列表线程很好地解释了clangclang++之间的区别: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