cygwin上的gcc 4.7.3是否支持C ++ 11并发功能?

时间:2013-05-11 11:59:29

标签: c++ c++11 cygwin

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

#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’

有谁知道最近发生了什么?

谢谢!

1 个答案:

答案 0 :(得分: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开始,_GLIBCXX_HAS_GTHREADS在构建libstdc++时未定义,因为pthread的Cygwin实现缺少某些功能。 MinGW也是如此。

注意:std::thread直接使用的GThreads是围绕POSIX线程的GCC包装。

builds of MinGW-w64 基于GCC 4.7和4.8,针对64位和32位,为std::thread提供实验支持。此外,是的,当然,只要您正确地在这两个环境之间切换,Cygwin和MinGW就可以共存,即将它们混合在PATH环境变量中。

相关链接: