GCC中未在命名空间std中找到std::thread。

16

我在Windows上使用MinGW,通过Eclipse IDE(如果有影响)使用GCC 4.5.0。

我正在使用-std=c++0x标志。

我发现_GLIBCXX_HAS_GTHREADS仍未定义,所以对于我来说thread仍不是命名空间std的成员,或者可能是其他原因。

如何使用GCC获得C++11线程支持?

P.S. 它无法识别-pthread标志。我在这个网站上的另一个问题中读到这个可以工作。

编辑:我很傻: pthread是一个库,而不是一个选项。它已安装,gcc可以找到头文件,但还没有成功。


你有包含 <thread> 吗? - James McNellis
是的,不然我怎么会找到那个宏呢?编辑:再次检查了一遍,我肯定包含了它。它仍然抱怨“thread”不是std的成员。 - defube
请查看答案 - Loom
5个回答

11

在Linux上运行良好(g++ -std=c++0x -lpthread没有额外的定义)。

然而,Cygwin邮件列表中的这个讨论帖表明,至少在4.4版本中,因为Cygwin的pthread实现缺少pthread_mutex_timedlock,当构建libstdc++时,autoconf测试禁用了_GLIBCXX_HAS_GTHREADS。也许MinGW有相同的问题。

此外,comp.lang.c++.moderated上的这个讨论帖也是相同的结论:库不支持。


4

本地的Windows版gcc不支持新的C++0x/C++11线程库。

(商业) Just::Thread 库为Windows的TDM版本gcc 4.5.2以及MSVC添加了支持。


3

是的,我知道boost,并且不介意使用它。我也知道gcc对C++0x的支持目前还处于实验阶段。我只是好奇为什么它在旧版本中可以工作,而在我的版本中却不能(我已经尝试过旧版本,但仍然得到相同的消息)。 - defube

3


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接