我在Cygwin(32位)中运行了最新版本的clang ++(v3.1)和g ++ / gcc(v4.7.3)。一切都在使用已安装的默认配置。这是Windows 8中Cygwin的全新安装。
我的问题是clang ++无法找到已安装的g ++ STL标头来编译我的项目。
#include <stdlib.h>
#include <mutex>
#include <thread>
int main() {
std::mutex myMutext;
return 0;
}
此示例代码在编译时会导致此错误。请注意libc stdlib.h头文件编译时没有错误。这是找不到的。我已经尝试过其他STL标头作为测试,同样的错误。
clang ++ -c -o test.o test.cpp
test.cpp:2:10: fatal error: 'mutex' file not found
#include <mutex>
^
1 error generated.
经过一些搜索后,似乎建议的选项是重新编译整个clang项目并将标题路径添加到其源或手动添加所有 g ++ STL标题路径到我的makefile这两个看起来都很简陋。
必须有一个更简单的选择,对吧?
答案 0 :(得分:2)
我不知道你是否解决了它,但我有一个更简单的解决方案:只需制作4.7.3到4.5.3的符号链接并用-lstdc ++选项编译你的代码,一切都将完成。
答案 1 :(得分:1)
clang++
将针对特定版本的libstdc++
进行构建(编译时)(IIRC)。它不会在运行时检查系统是否有新版本。
libstdc++
cygwin的clang-3.1
软件包似乎使用的是gcc-4.5.3
,如clang++ -v test.cc
的输出所示。但是,gcc-4.5.3
未安装在您的环境中。
您的选择,其中没有一个是伟大的:
gcc
降级为4.5.3。但是,由于libstc++
附带的gcc-4.5.3
缺乏支持,您的C ++ 11代码仍然无法编译。clang
,针对较新的gcc
。libc++
自己构建clang
。但是,Windows(完全)支持它的可能性极小。gcc-4.7
。无论如何,Windows支持在gcc
中更加成熟(并且不要让我开始关于交叉编译器)。(旁白:您需要-std=c++11
来编译代码)