【问题标题】:Why doesn't my compiler recognize #include <thread> (c++)?为什么我的编译器无法识别#include <thread> (c++)?
【发布时间】:2020-12-14 08:11:40
【问题描述】:

我把它写成一个多线程示例的简化版本来感受一下,但是在编译时遇到了一些问题。我的编译器说thread 不是std 的成员,并提示我将#include &lt;thread&gt; 添加到我的代码中,即使我已经这样做了。到目前为止,我一直无法找到任何类似的问题,但我怀疑这是我如何编译它的问题,因为我的代码与示例代码非常相似。

#include <iostream>
#include <thread>

void doWork () {
    std::cout << "Working...\n";
}

int main () {
    std::thread worker(doWork);
    
    work.join();
    std::cout << "Finished\n";
    
    return 0;
}

我的编译器是 MinGW g++ 9.2.0
我用g++ main.cpp -o main 编译它给了我这些错误:

main.cpp: In function 'int main()':
main.cpp:9:7: error: 'thread' is not a member of 'std'
    9 |  std::thread worker(doWork);
      |       ^~~~~~
main.cpp:3:1: note: 'std::thread' is defined in header '<thread>'; did you forget to '#include <thread>'?
    2 | #include <thread>
  +++ |+#include <thread>
    3 |
main.cpp:11:2: error: 'work' was not declared in this scope
   11 |  work.join();
      |  ^~~~

【问题讨论】:

  • 需要在命令行中添加-std=c++11
  • 我们至少可以为您修复最后一个错误:work 应该是 worker
  • @user4581301 哦,是的,我错过了。

标签: c++ multithreading mingw


【解决方案1】:

MinGW-w64 默认自带原生 (Win32) 而不是 POSIX 线程支持,遗憾的是目前没有 Win32 gthreads 实现(libstdc++ 的线程子系统),因此 GCC 中没有线程功能。

您需要从 x86_64-w64-mingw32-g++-win32 切换到 x86_64-w64-mingw32-g++-posix 包才能让 std::thread 在 MinGW-w64 中工作。

问题mingw-w64 threads: posix vs win32 更详细地讨论了这个问题。

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多