【问题标题】:How to use std::thread of C++ 11 under Cygwin GCC 4.7.2如何在 Cygwin GCC 4.7.2 下使用 C++ 11 的 std::thread
【发布时间】:2012-11-06 02:43:31
【问题描述】:

我一直在尝试使用新引入的 C++ 11 std::thread 功能在 Cygwin 下编译多线程 hello-world 程序,但没有成功。我自己编译安装了 GCC 4.7.2,同样的代码在 Linux 下使用相同版本的 GCC 运行没有任何问题。我得到的第一个错误是编译器无法识别 -pthread 标志。在研究了一段时间后,我注意到有人在 Cygwin 上说这个标志应该是 -lthread。我进行了更改并且该错误消失了,但是发生了另一系列错误,告诉我线程不是 std 的成员。不知是安装时编译器配置错误,还是Cygwin下根本不支持std::thread?

【问题讨论】:

  • 我没有仔细看以确定,但我的猜测是后者。 std::thread 和 company 就像 pthreads 一样,在 Linux 上的实现应该非常简单。 Windows 的线程模型非常不同,因此需要做更多的工作。
  • 但是Windows上有pthreads
  • pthreads 支持是 Cygwin 的一部分 - 不需要 pthreads-win32。
  • 非常感谢您的回复,但我仍然很困惑。 Cygwin下有没有办法使用std::thread?一个简单的否定答案听起来很奇怪,因为它现在是 C++ 标准库的一部分。
  • 如果您查看最新的 mingw 版本,您会注意到实际上有 2 个不同的版本:一个支持 std::thread,另一个不支持,所以在 GCC 端口到 windows世界,我不认为 std::thread 支持是给定的。

标签: c++ multithreading gcc c++11 cygwin


【解决方案1】:

这看起来您没有使用适当的标准库标志编译程序。如果你想为 C++11 编译,你应该使用:

g++ --std=c++0x -o ...

--std 标志设置适当的语言兼容性级别。如果这没有帮助,请将您收到的错误消息作为来源列表发布。

【讨论】:

  • 是的,正如迈克尔所说,g++ 开始接受 --std=c++11 标志,而不是 4.7 中的旧 c++0x 标志。我用标志集编译了代码,只是我说它告诉我“线程”不是std的成员。同样的代码在Unix环境下编译没有任何问题。
猜你喜欢
  • 2013-07-07
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
相关资源
最近更新 更多