clang ++无法编译hello world

时间:2018-12-17 09:35:21

标签: c++ clang++

我在conda环境中与gcc一起安装了clang。他们的版本是

gcc     7.2.0
clang   7.0.0
libcxx  7.0.0

然后我创建了一个hello world src文件a.cpp

  1. 如果我使用clang++ a.cpp编译文件。错误显示为

    a.cpp:1:10: fatal error: 'iostream' file not found
    #include <iostream>
             ^~~~~~~~~~
    1 error generated.
    
  2. 使用clang++ a.cpp --stdlib=libstdc++,错误相同

  3. 使用clang++ a.cpp --stdlib=libc++,错误变为

    ~/conda/envs/test/bin/ld: cannot find crtbegin.o: No such file or directory
    ~/conda/envs/test/bin/ld: cannot find -lgcc
    clang-7: error: linker command failed with exit code 1 (use -v to see invocation)
    
  4. 使用clang++ a.cpp -I$HOME/conda/envs/test/include/c++/7.2.0

    In file included from a.cpp:1:
    /site/home/shliu/conda/envs/test/include/c++/7.2.0/iostream:38:10: fatal error: 'bits/c++config.h' file not found
    #include <bits/c++config.h>
             ^~~~~~~~~~~~~~~~~~
    1 error generated.
    

我使用共享计算机,所以无法安装系统范围的编译器和头文件。

问题:

  1. 我应该怎么做才能使其正常工作?
  2. 如果clang没有附带其自己的头文件,并且我需要使用gcc提供的内容,我是否应该考虑clang versiongcc version的兼容性?
  3. 是否需要在相同的conda环境中安装libc++才能使用clang++

经过一些测试,我在conda中找到了解决方法,这是答案。但是,我仍然不了解clang的工作方式,尤其是它与gcc的关系。如果有人可以回答,我将不胜感激(我将接受它作为本文的答案):

  1. clang是否将所有作业转发到gcc,所以我们总是需要安装gcc工具链才能使用clang
  2. 我找到了clang的包含文件夹,它是$HOME/conda/envs/test/include/c++/v1以及$HOME/conda/envs/test/include/c++/7.2.0的{​​{1}}文件夹。但是,如果指定了gcc,则不会在--gcc-toolchain文件夹中搜索标头(通过在编译器中添加v1可以从输出中看到。) -v包含文件?

1 个答案:

答案 0 :(得分:1)

最后我找到了解决方法

clang++ --gcc-toolchain=$HOME/conda/envs/test a.cpp

这一点都不明显。