我尝试在c ++中编译一个简单的c ++代码,但是当我尝试在Windows中使用g ++对其进行编译时,总是会返回错误。
我使用
g++ -std=c++0x -pthread main.cpp
错误消息是:
std::thread' is defined in header '<thread>'; did you forget to '#include <thread>'?
这没什么意义,因为代码只是
#include<thread>
void f(int i) {}
int main() {
std::thread t(f, 1);
t.join();
return 0;
}
我相信此代码可在linux上运行,我想知道为什么它无法在Windows下运行。
答案 0 :(得分:5)
要使用std::thread
,您必须将代码编译为C ++ 11,C ++ 14或C ++ 17。
您正在将-std=c++0x
传递给gcc。 c++0x
是gcc C ++ 11实现的预发行版本的名称,并且取决于您的编译器版本,该名称可能不完整。
将您的gcc命令行更改为-std=c++11
,很可能情况会更好。如果没有,您可能需要获取较新版本的编译器。
答案 1 :(得分:0)
Windows有其自己的非POSIX标准的线程API。您需要找出的是(如何获取以及)如何为编译器链接线程库。听起来您正在使用MinGW?我使用MSVC,它会自动与Windows线程库链接。不幸的是,我不知道如何为MinGW执行此操作,因此这不是最佳答案,但这是一个可以帮助您入门的链接:
Does MinGW-w64 support std::thread out of the box when using the Win32 threading model?