在Windows 11使用MinGW-w64 v13.2.0与g++、C++17环境下无法引入<experimental/coroutine>头文件的解决方法
在Windows 11使用MinGW-w64 v13.2.0与g++、C++17环境下无法引入<experimental/coroutine>头文件的解决方法
嘿,我来帮你捋清楚这个问题~ 其实你遇到的情况是MinGW-w64的gcc 13.2.0版本在C++17模式下,已经不再提供<experimental/coroutine>这个头文件了,这也是为什么你加了-fcoroutines选项也没用——问题出在头文件本身不存在,而不是编译开关没加对。
你在MinGW目录里找到的那个coroutine文件,正是问题的关键:它是C++20标准正式纳入的协程头文件,替代了之前处于实验阶段的<experimental/coroutine>。gcc从10.x版本开始就支持C20的标准协程,而到了13.x版本,干脆移除了C17模式下的experimental协程头,只保留标准版本。
下面给你两种解决思路,按需选择:
方案1:迁移到C++20标准协程(推荐)
这是最稳妥的方式,因为experimental特性本来就是临时的,标准版本更稳定且后续支持更好:
- 把代码里的
#include <experimental/coroutine>改成#include <coroutine> - 同时调整编译命令,把C标准从C17切换到C++20(或更高),保留
-fcoroutines选项(部分gcc版本可能默认启用,但加上更保险)。示例命令:g++ -std=c++20 -fcoroutines your_file.cpp - 注意:如果你的代码里用到了
std::experimental::coroutine_handle这类experimental命名空间下的类型,需要改成std::coroutine_handle(对应标准命名空间)。
方案2:降级MinGW-w64版本(不推荐,仅当你必须保留C++17和experimental协程时)
如果你因为某些原因无法迁移到C20,只能用C17的experimental协程,那你需要降级到更早的MinGW-w64版本(比如gcc 11.x或更早)——这些版本在C++17模式下还保留了<experimental/coroutine>头文件。不过这种方式不推荐,因为旧版本可能存在其他bug,且experimental特性不会再得到维护。
备注:内容来源于stack exchange,提问作者okaka
相关产品推荐
相关产品推荐

