【问题标题】:clang++ fails to compile hello worldclang++ 无法编译 hello world
【发布时间】:2018-12-17 09:35:21
【问题描述】:

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

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 以及来自gcc$HOME/conda/envs/test/include/c++/7.2.0。但是如果--gcc-toolchain已经指定了,v1文件夹就不会搜索headers了,(从输出中可以看出-v到编译器。那么v1包含文件有什么用?

【问题讨论】:

  • 你也安装了 libc++ 吗?如果你告诉 clang 使用它,那么是的,你需要安装它!
  • bits/c++config.h 是 libstdc++ 的一个实现细节,不要指望在 libc++ 中有它!
  • 使用 conda 我没有找到 libc++。但我尝试了libcxx 并没有改变结果
  • 相同。 libc++ 和 libcxx 是 clang 可以使用的同一个后端。如果 conda 没有提供它,那么坚持使用 libstdc++。
  • 然后我安装了它,我得到了同样的错误。如何“坚持使用 libstdc++”?

标签: c++ clang++


【解决方案1】:

终于找到了方法,也就是去做

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

这一点都不明显。

【讨论】:

    猜你喜欢
    • 2020-08-02
    • 1970-01-01
    • 2013-04-25
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    相关资源
    最近更新 更多