最简单的方法是配置clang ++在Cygwin中使用g ++ / gcc STL头文件?

时间:2013-08-28 15:24:21

标签: c++ gcc stl g++ clang

我在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这两个看起来都很简陋。

必须有一个更简单的选择,对吧?

2 个答案:

答案 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来编译代码)