3

我正在 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 中,这两种方法看起来都有些骇人听闻。

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

4

2 回答 2

2

我不知道你是否解决了它,但我有一个更简单的解决方案:只需将 4.7.3 的 s 符号链接设置为 4.5.3 并使用 -lstdc++ 选项编译你的代码,一切都会完成。

于 2013-10-29T13:25:47.717 回答
1

clang++将针对默认(IIRC)的特定版本构建(编译时)。libstdc++它不会在运行时检查系统是否有较新的版本。

cygwin的包似乎使用的是libstdc++,如. 但是,没有安装在您的环境中。clang-3.1gcc-4.5.3clang++ -v test.ccgcc-4.5.3

您的选择,其中没有一个是伟大的:

  • 通过设置降级gcc到 4.5.3。但是,libstc++由于gcc-4.5.3.
  • 建立clang自己,对抗新的gcc.
  • 建立clang自己,与libc++. 但是,它极不可能(完全)支持 Windows。
  • 改为使用gcc-4.7。无论如何,Windows 支持现在要成熟得多gcc(不要让我开始了解交叉编译器)。

(旁白:你需要-std=c++11编译你的代码)

于 2013-08-28T18:38:25.853 回答