How do I compile C++ with Clang?

后端 未结 6 1344
陌清茗
陌清茗 2020-12-12 16:37

I have installed Clang by using apt-get in Ubuntu, and I can successfully compile C files using it. However, I have no idea how to compile C++ through it. What do I need to

相关标签:
6条回答
  • 2020-12-12 17:20

    The command clang is for C, and the command clang++ is for C++.

    0 讨论(0)
  • 2020-12-12 17:20

    Also, for posterity -- Clang (like GCC) accepts the -x switch to set the language of the input files, for example,

    $ clang -x c++ some_random_file.txt
    

    This mailing list thread explains the difference between clang and clang++ well: Difference between clang and clang++

    0 讨论(0)
  • 2020-12-12 17:23

    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++. 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.

    Or you can just use clang++ test.cc to compile the program. It will produce a default executable file named a.out. Use ./a.out to run the file.

    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 shows a list of diagnostic flags supported by Clang.

    A note on using clang -x c++: Kim Gräsman says that you can also use clang -x c++ to compile cpp programs, but that may not be true. For example, I am having a simple program below:

    #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 not, showing a lot undefined references errors. So I guess they are not exactly equivalent. It is best to use clang++ instead of clang -x c++ when compiling c++ programs to avoid extra troubles.

    • clang version: 11.0.0
    • Platform: Ubuntu 16.04
    0 讨论(0)
  • 2020-12-12 17:32

    solution 1:

      clang++ your.cpp
    

    solution 2:

      clang your.cpp -lstdc++
    

    solution 3:

       clang -x c++ your.cpp 
    
    0 讨论(0)
  • 2020-12-12 17:39

    Open a Terminal window and navigate to your project directory. Run these sets of commands, depending on which compiler you have installed:

    To compile multiple C++ files using clang++:

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

    To compile multiple C++ files using g++:

    $ g++ -c *.cpp 
    $ g++ -o temp.exe *.o
    $ ./temp.exe
    
    0 讨论(0)
  • 2020-12-12 17:43

    I've had a similar problem when building Clang from source (but not with sudo apt-get install. This might depend on the version of Ubuntu which you're running).

    It might be worth checking if clang++ can find the correct locations of your C++ libraries:

    Compare the results of g++ -v <filename.cpp> and clang++ -v <filename.cpp>, under "#include < ... > search starts here:".

    0 讨论(0)
提交回复
热议问题