0

我正在尝试在安装了 cygwin 并将 gcc 编译器更新到 4.7.3 的 64 位 Windows 7 机器上编译以下程序:

#include <vector>
#include <thread>
#include <mutex>

using namespace std;

std::mutex flemutex;
std::mutex arrmutex;

main() {

thread t;
}

在使用以下命令编译时:

 gcc -std=c++11 -o file.o -c file.cpp

我收到以下错误:

file.cpp:12:1: error: ‘mutex’ in namespace ‘std’ does not name a type
file.cpp:13:1: error: ‘mutex’ in namespace ‘std’ does not name a type
file.cpp: In function ‘int main()’:
file.cpp:39:3: error: ‘thread’ is not a member of ‘std’
file.cpp:39:15: error: expected ‘;’ before ‘t’

有谁知道发生了什么事?

谢谢!

4

1 回答 1

1

您可以尝试以下方法:

#include <thread>
#include <iostream>

using std::cout;
using std::endl;

main() {
#ifndef(_GLIBCXX_HAS_GTHREADS)
  cout << "GThreads are not supported..." << endl;
#endif
}

事实上,从 GCC 4.4 开始,由于 Cygwin 的实现缺少一些功能,所以在构建_GLIBCXX_HAS_GTHREADS时是未定义的。MinGW 也是如此。libstdc++pthread

注意:直接使用的 GThreads 是std::threadPOSIX 线程的 GCC 包装器。

有基于 GCC 4.7 和 4.8的 MinGW-w64 构建,针对 64 位和 32 位,它们为std::thread. 此外,是的,只要您在这两个环境之间正确切换,当然 Cygwin 和 MinGW 可以共存,即不要PATH环境变量中混合它们。

相关链接:

于 2013-05-11T19:34:58.770 回答