使用MinGW(CodeBlocks附带GCC 5.1)构建Boost库失败求助
解决MinGW GCC 5.1编译Boost时execnt.c的UnregisterWait隐式声明警告
我之前也踩过这个坑,正好给你梳理下靠谱的解决方案:
问题根源
你碰到的这个警告,本质是CodeBlocks附带的旧版MinGW GCC 5.1对Windows API的头文件支持不完整。UnregisterWait这个函数属于Windows系统API,在较新的Windows SDK头文件里才会被正确声明,而老版本MinGW的头文件里没包含它的声明,所以编译Boost的execnt.c时就触发了隐式函数声明的警告。
推荐解决方案:升级MinGW
这是最彻底的解决办法,也是你已经在做的方向,补充几个细节:
- 优先选MinGW-w64(不是旧版的MinGW),它对Windows API的支持更全面,完全适配Boost的构建需求。
- 安装完成后,一定要把新MinGW的
bin目录替换掉PATH环境变量里旧的CodeBlocks附带MinGW路径,避免系统还是调用老版本编译器。 - 重新运行
bootstrap.bat gcc(MinGW-w64用gcc参数比mingw更稳妥),这个警告基本就会消失。
临时修复方案(不想升级时用)
如果暂时不想升级编译器,也可以手动补全函数声明绕过警告:
- 找到Boost源码里的
execnt.c文件,路径大概是boost\process\detail\win32\execnt.c - 在文件开头的头文件引用后,手动添加
UnregisterWait的函数声明:#include <windows.h> BOOL WINAPI UnregisterWait(HANDLE WaitHandle);
不过这个方法只是临时救急,后续构建Boost其他模块时可能还会碰到类似的API兼容问题,还是升级编译器更省心。
验证步骤
- 打开命令提示符,输入
gcc --version,确认显示的是新安装的MinGW版本号,确保PATH配置生效。 - 清理Boost目录下之前生成的临时文件(删掉
bjam.exe和bin.v2文件夹),再重新运行bootstrap和后续的构建命令。
内容的提问来源于stack exchange,提问作者JavScars
相关产品推荐
相关产品推荐

