You need to enable JavaScript to run this app. 使用MinGW G++编译包含<windows.h>的C++代码时出现异常编译器错误
优惠活动
大模型
产品
解决方案
定价
更多

使用MinGW G++编译包含<windows.h>的C++代码时出现异常编译器错误

编译错误解决方案

核心问题根源

你当前的错误本质是手动将微软官方Windows SDK的头文件路径加入了MinGW GCC的头搜索目录,MinGW本身已经自带适配GCC语法的Win32 API头文件,两种来源的头文件定义完全不兼容,产生冲突。

优先解决方案(99%场景适用)

  • 直接从你的头文件包含目录中移除以下两个微软Windows SDK路径:
    C:/Program Files (x86)/Windows Kits/10/Include/10.0.20348.0/um
    C:/Program Files (x86)/Windows Kits/10/Include/10.0.20348.0/shared
    
  • 同步移除路径中的32位MinGW头文件目录C:/msys64/mingw32/include/c++/10.2.0/i686-w64-mingw32/bits,你使用的是64位MinGW GCC,混入32位头路径会引发额外架构冲突。

修改完成后直接执行原有编译命令g++ -fpermissive -std=c++2a nuevotest.cpp即可正常编译。

错误原因说明

  • 所有expected primary-expression before ';' token类错误:微软SDK中NULL的定义依赖MSVC编译器的特有宏定义,GCC环境下缺少对应宏,导致NULL无法被识别为合法表达式。
  • redefinition of 'struct timeval'错误:微软SDK的winsock头文件中timeval的定义,和GCC自带标准库time.h中的定义重复,MinGW自带的winsock头文件已经做了去重适配,不会出现该冲突。

特殊场景处理(需要使用高版本Windows新API)

如果确实需要调用高版本Windows SDK才提供的新API,不要直接加SDK头路径,而是在编译参数中添加-D_WIN32_WINNT=0x0A00(数值根据你需要的最低Windows版本调整,0x0A00对应Windows 10及以上),MinGW自带的头文件会自动启用对应版本的API声明。

内容的提问来源于stack exchange,提问作者drak09

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 13:15:03