微软 SDK 导致的项目编译失败哦~

简 述: 哇卡卡卡,这次又抓到了 Microsoft win10 的 🐛,这次还影响到了我写代码哦🙄。项目使用 Release X86 编译会成功,而切换到 Release X64 编译会失败。

Error (active) E0147 declaration is incompatible with “BOOLEAN _BitScanForward” (declared at line 2825 of “C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um\winnt.h”) C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\intrin0.inl.h 123

Error C2007 #define syntax C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h 38
Error C2144 syntax error: ‘int’ should be preceded by ‘;’ C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h 43
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h 43


本文初发于 “偕臧的小站”,同步转载于此。


背景

对于商业项目,素来用 Release X86 模式编译,需要调试就关闭优化,整个解决方案都是可以编译通过的。但这次需要编译一个 x64 的 dll,来调试;在本机 VS 2019 直接切换为 Release X64 ,报错如下!!! 💻 win10 21H2 📎 Qt 5.12.11 📎 Visual Studio 2019


JKS 上明明是有提供的 X64 的 dll,代码即使一行不改,你还报错这么多?你是认真的麽!!! 大声哔哔。


分析

看错都是从头的第一个开始看、开始解,但这次这个错看的很颓然!!!

于是开始 从最底部的错开始看(没错,你是重点🌈)

  • 什么错来着,语法错误???
  • 还是微软的 minwindef.h 的问题????你确定不是我们的问题??? (你相信自己代码写错的,还是相信 Microsoft 的代码写错了???)怀疑人生中🙄

常见的基本设置都检查一遍后,(包含的头文件路径、库文件链接、C++ 17 及以上、Unicode 编码、优化关闭、多核编译开启),还是一直报这个错。问了一圈,大家都没有编译过 x64 的。

。。。蛋疼中。。。

。。。继续蛋疼中。。。

。。。持续蛋疼中。。。

难道真的是 Microsoft 的错???,思来想去,再看看此文件,再结合 Compiler Error C2007 ,目光又投投向了 minwindef.h 文件。


好吧?此刻我觉得里的文件的概率为 30%,但认为可能是你的错却是 10% 的概率;去控制中心找到 Microsoft Visual Stdio Installer 单独升级了一下 sdk (选择了一个最新的 win10,非 win11);然后重新编译一下,一把过,显示成功了。🤦‍♂️🚀,狂喜


解决

最后的解决方案是将 SDK 由 10.0.19041.0 提升到了 10.0.20348.0。呵~


事后,bc 比较下两个文件,实锤了,且错的很明显和粗糙,这下不是猜测了,晚上可以睡个安心觉了。终究还是 Microsoft 提供的库有错。


总结

最大的收获,是本次心路历程,觉得不可一世的 Microsoft SDK 不可能出错,只可能是我们的代码写的有问题。但这次破除了心里的这种“封建迷信”,亲身体验过,才知道没有什么不可能,这种感觉很奇妙。广泛点说这也算是第三次遇到微软的错误了吧[1],只是前两次都没有这么明显和直接。


系列

QtExamples

欢迎 star ⭐ 和 fork 🍴这个系列的 C++ / QT / DTK 学习,附学习由浅入深的目录。



[1] 注释,指代:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偕臧x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值