我在conda环境中与gcc一起安装了clang。他们的版本是
gcc 7.2.0
clang 7.0.0
libcxx 7.0.0
然后我创建了一个hello world src文件a.cpp
如果我使用clang++ a.cpp
编译文件。错误显示为
a.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
^~~~~~~~~~
1 error generated.
使用clang++ a.cpp --stdlib=libstdc++
,错误相同
使用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)
使用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.
我使用共享计算机,所以无法安装系统范围的编译器和头文件。
clang
没有附带其自己的头文件,并且我需要使用gcc
提供的内容,我是否应该考虑clang version
和gcc version
的兼容性? libc++
才能使用clang++
?经过一些测试,我在conda中找到了解决方法,这是答案。但是,我仍然不了解clang
的工作方式,尤其是它与gcc
的关系。如果有人可以回答,我将不胜感激(我将接受它作为本文的答案):
clang
是否将所有作业转发到gcc
,所以我们总是需要安装gcc
工具链才能使用clang
?clang
的包含文件夹,它是$HOME/conda/envs/test/include/c++/v1
以及$HOME/conda/envs/test/include/c++/7.2.0
的{{1}}文件夹。但是,如果指定了gcc
,则不会在--gcc-toolchain
文件夹中搜索标头(通过在编译器中添加v1
可以从输出中看到。) -v
包含文件?答案 0 :(得分:1)
最后我找到了解决方法
clang++ --gcc-toolchain=$HOME/conda/envs/test a.cpp
这一点都不明显。