MinGW9.2.0编译C++ OpenMP代码报std::this_thread、chrono未声明错误
问题根因及解决方案
1. 代码语法错误修复
你代码中使用chrono::seconds时未指定所属的std命名空间,<chrono>头文件的所有接口都归属std命名空间,需要修改为std::chrono::seconds。
修改后的对应代码行如下:
std::this_thread::sleep_for(std::chrono::seconds(20000));
2. MinGW环境问题修复
你使用的MinGW.org官方发布的GCC 9.2.0默认采用win32线程模型,该模型版本的GCC没有实现C标准库的std::thread、std::this_thread等线程相关接口,这也是你指定C11/14/17标准都无法解决问题的核心原因,和编译参数无关,属于编译器本身的功能缺失。
可选解决方案二选一:
- 方案A:替换编译器版本
更换为采用posix线程模型的MinGW-w64版本,可通过MSYS2安装或直接下载MinGW-builds的posix线程版本GCC,该版本完整实现了C++标准线程库,修复代码语法后直接使用原有编译命令即可正常编译。 - 方案B:适配现有MinGW版本
不使用C++标准线程库的休眠接口,替换为Windows原生API,修改如下:- 头文件添加
#include <windows.h> - 休眠代码行替换为
Sleep(20000 * 1000);(Windows的Sleep接口参数单位为毫秒,且首字母大写)
修改后不需要依赖std::this_thread相关接口,现有MinGW版本可直接编译运行。
- 头文件添加
内容的提问来源于stack exchange,提问作者Marius Magaud
相关产品推荐
相关产品推荐

