Windows11下MinGW编译C++多线程代码报'thread'未声明错误
解决MinGW编译C++多线程代码的报错问题
问题根源
你碰到的'thread' was not declared in this scope类错误,核心是两个问题:
- GCC默认以C++98标准编译代码,而
std::thread是C++11才引入的特性,编译器自然识别不了该类型。 - MinGW环境下使用C标准库的线程功能,必须显式链接线程库,否则即便启用了C11+标准,后续也会出现链接错误。
解决方法
1. 命令行编译的正确指令
在终端执行编译时,需同时指定C++版本并链接线程库,使用如下命令:
g++ -std=c++14 cppTest.cpp -o cppTest.exe -lpthread
-std=c++14:指定编译标准为C++14(你的GCC6.3完全支持,也可替换为-std=c++11)-lpthread:链接MinGW的pthread线程库,确保std::thread相关功能正常工作
2. Sublime Text编译配置修改
如果你用Sublime Text编译代码,需要调整编译系统配置:
- 依次点击
工具→编译系统→新建编译系统 - 将默认内容替换为以下配置:
{ "cmd": ["g++", "-std=c++14", "${file}", "-o", "${file_base_name}.exe", "-lpthread"], "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "${file_path}", "selector": "source.c, source.c++", "shell": true, "encoding": "utf-8" }
- 保存为
C++14 Thread.sublime-build,之后选择该编译系统编译代码即可。
额外说明
编译通过后,你会发现程序输出的number值大概率小于2000000——这是因为代码未对共享资源加同步(比如std::mutex),存在竞态条件,属于多线程编程的正常现象,和本次编译报错无关。
内容的提问来源于stack exchange,提问作者hvbuddy
相关产品推荐
相关产品推荐

