解决qt5.9.4和2015配置xilinx上位机报错问题

解决 Qt 5.9.4 MSVC 版本的头文件冲突问题

核心原则是保持 MSVC CRT 头文件的优先级,避免强制替换为 Windows Kits 的 stdlib.h,否则会导致宏缺失或调用约定错误(如 __cdecl)。以下是具体解决方案:

确保 INCLUDEPATH 顺序正确
Qt 工程可以保留 Windows Kits 的路径,但必须确保 MSVC CRT 头文件路径在前,Windows Kits 路径在后。这样既能使用 MSVC 的 CRT 头文件,又能兼容 UCRT。

推荐 .pro 配置
在 Qt 项目的 .pro 文件中添加以下路径,确保 MSVC CRT 优先:

# MSVC 自带 CRT 优先
INCLUDEPATH = $$[QT_INSTALL_PREFIX]/msvc2015_64/include \
              "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include" \
              "C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/ucrt" \
              "C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/shared" \
              "C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/um"

检查宏污染
确认项目中没有错误定义以下宏,否则可能导致编译冲突:

#define __cdecl
#define WINAPI
#define FAR

如果存在这些宏,需删除或使用 #undef 取消定义。

验证工具链
确保 Qt Creator 的 Kit 配置正确:

  • 选择 Qt 5.9.4 msvc2015_64
  • 使用 MSVC2015 x64 编译器

在命令行执行以下命令,检查 stdlib.hwinnt.h 的来源:

cl /showIncludes main.cpp

确保 stdlib.h 来自 MSVC CRT 路径,而 winnt.h 来自 Windows Kits 的 ucrtsharedum 目录。

常见问题与解决方案

问题解决方案
__cdecl 未识别不要使用 Windows Kits 的 stdlib.h,保持 MSVC CRT 头文件优先
winnt.h 报错确保 INCLUDEPATH 顺序为 ucrtsharedum
Qt 5.9.0 正常,5.9.4 出错Qt 5.9.4 强制使用 Windows 10 SDK,需严格检查宏和调用约定

结论
使用 Qt 官方配置的 MSVC CRT + Windows Kits,避免手动替换 stdlib.h,即可解决编译错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

行者..................

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

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

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

打赏作者

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

抵扣说明:

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

余额充值