QT-Windows Kits-版本问题:【“_mm_loadu_si64”: 找不到标识符】解决方案[NEW]

【"_mm_loadu_si64": 找不到标识符】+【LNK1158: 无法运行 "rc.exe"】解决方案

  • 一、问题描述
  • [二、 解决方案](#二、 解决方案)
    • [步骤1:修改.pro文件(强制锁定旧 SDK 路径,覆盖系统默认)](#步骤1:修改.pro文件(强制锁定旧 SDK 路径,覆盖系统默认))
    • [步骤2:彻底清除系统 SDK 的环境变量干扰](#步骤2:彻底清除系统 SDK 的环境变量干扰)
    • [步骤 3:重建项目(确保无缓存残留)](#步骤 3:重建项目(确保无缓存残留))
    • [步骤4:指定资源编译器rc.exe-【LNK1158: 无法运行 "rc.exe"】](#步骤4:指定资源编译器rc.exe-【LNK1158: 无法运行 "rc.exe"】)
  • 三、关键原理说明

一、问题描述

目前问题的核心是项目在读取系统默认的新版 SDK 路径【10.0.26100.0-属于 最新的 Windows 11 SDK】(优先级高于项目配置),且_mm_loadu_si64的依赖头文件未被系统头文件(如wchar.h)优先加载。

系统配置-QT5.12.12,MSVC2015

二、 解决方案

需通过强制覆盖项目的头文件 / 库路径优先级 + 预加载 SIMD 头文件彻底解决【更改项目的构建环境】。

本机的旧SDK有【10.0.10240.0】和【10.0.19041.0】:

其中,10.0.10240.0是非常旧的 Windows 10 SDK 版本(对应 Windows 10 1507 版),部分早期版本的 SDK 目录结构可能不完整,甚至缺少um文件夹(um是 "User Mode" 的缩写,包含windows.h等核心头文件)。

Qt 5.12.12 支持 MSVC2015,而10.0.19041.0是 Windows 10 SDK(对应 2004 版),MSVC2015 可以兼容这个 SDK 版本(MSVC2015 及以上的工具集对高版本 SDK 有向下兼容性)。

且10.0.19041.0版本的 SDK必然包含um文件夹(这是新版 SDK 的标准目录结构,windows.h就位于...\10.0.19041.0\um\下)。

步骤1:修改.pro文件(强制锁定旧 SDK 路径,覆盖系统默认)

将.pro文件中 SDK 相关配置替换为以下内容(直接用 QT 的INCLUDEPATH/LIBS,优先级高于编译器参数):

cpp 复制代码
# 1. 强制指定旧SDK的头文件路径(覆盖系统所有默认路径)
INCLUDEPATH += \
    D:\Windows Kits\10\Include\10.0.19041.0\ucrt \
    D:\Windows Kits\10\Include\10.0.19041.0\um \
    D:\Windows Kits\10\Include\10.0.19041.0\shared

# 2. 强制指定旧SDK的库路径
LIBS += \
    -L"D:\Windows Kits\10\Lib\10.0.19041.0\ucrt\x64" \
    -L"D:\Windows Kits\10\Lib\10.0.19041.0\um\x64"

# 3. 启用SSE2指令集+强制预定义宏(绑定旧SDK)
QMAKE_CXXFLAGS += /arch:SSE2 /D "_WIN32_WINNT=0x0A00" /D "__SSE2__"

# 4. 强制预包含SIMD头文件(确保在wchar.h之前加载)
QMAKE_CXXFLAGS += /FI"intrin.h" /FI"emmintrin.h"

# 指定资源编译器路径(若系统rc.exe版本不匹配)
QMAKE_RC = D:\Windows Kits\10\bin\10.0.19041.0\x64\rc.exe

/FI参数:强制在所有源文件的最开头包含指定头文件,确保_mm_loadu_si64的定义先于wchar.h加载。

步骤2:彻底清除系统 SDK 的环境变量干扰

在项目的「Build Environment」中,添加以下变量(覆盖系统级 SDK 路径):

变量名 变量值(替换为你的旧 SDK 路径)

cpp 复制代码
INCLUDE	D:\Windows Kits\10\Include\10.0.19041.0\ucrt;D:\Windows Kits\10\Include\10.0.19041.0\um;D:\Windows Kits\10\Include\10.0.19041.0\shared;D:\Windows Kits\10\Include\10.0.19041.0\winrt
cpp 复制代码
LIB	D:\Windows Kits\10\Lib\10.0.19041.0\ucrt\x64;D:\Windows Kits\10\Lib\10.0.19041.0\um\x64
  • 【Build Environment】- INCLUDE

  • 【Build Environment】- LIB

  • 【Build Environment】- Windows SDK

步骤 3:重建项目(确保无缓存残留)

关闭 QT Creator;

删除项目目录下的所有构建文件夹(包括隐藏的缓存文件);

重新打开 QT Creator,导入项目(不要直接打开旧工程,选择「导入现有项目」);

执行「Run qmake」→「Build」。

步骤4:指定资源编译器rc.exe-【LNK1158: 无法运行 "rc.exe"】

若在重构项目后,出现报错【LNK1158: 无法运行 "rc.exe"】,核心原因是Qt 构建过程中找不到资源编译器rc.exe,而当前的.pro配置虽然指定了 SDK 路径,但 rc.exe的路径并未被正确加入到构建环境的PATH中 。

1、问题分析

rc.exe是 Windows SDK 中的资源编译器,用于编译.rc资源文件。配置中虽然用QMAKE_RC指定了rc.exe的路径,但 Qt 的构建工具(jom/make)可能仍无法在PATH中找到它,或者缺少其依赖的rcdll.dll文件。

2、解决方案:直接让rc.exe可被系统找到

  • 方法 1:

    将rc.exe路径添加到项目的PATH环境变量

    在 Qt Creator 的「项目」→「构建设置」→「Build Environment」中,编辑PATH变量,添加rc.exe所在的目录:

    • 变量名:PATH
    • 变量值:在原有内容后追加(注意用分号分隔):D:\Windows Kits\10\bin\10.0.19041.0\x64
  • 方法 2:

    手动复制【rc.exe】和【rcdll.dll】到 Qt 的 bin 目录

    找到【rc.exe】和【rcdll.dll】:路径是D:\Windows Kits\10\bin\10.0.19041.0\x64(和你指定的QMAKE_RC路径一致)。

    复制这两个文件到Qt 的 MSVC 编译器 bin 目录:比如D:\QT5.12.12\5.12.12\msvc2015_64\bin(对应你的 Qt 版本和编译器架构)。

三、关键原理说明

用INCLUDEPATH/LIBS替代编译器参数:QT 的INCLUDEPATH/LIBS会直接覆盖系统默认的头文件 / 库路径,避免新版 SDK 路径被读取;

/FI强制预包含:让intrin.h/emmintrin.h在wchar.h之前加载,确保_mm_loadu_si64的定义被系统头文件识别。

完成以上操作后,项目会完全脱离系统 SDK 的干扰,强制使用旧 SDK 并正确加载_mm_loadu_si64的依赖,解决标识符找不到的问题。

相关推荐
下页、再停留4 小时前
【C#桌面客户端系列学习-8】批量导出数据为csv格式
开发语言·c#·visual studio
菜鸟~noob2334 小时前
【电子战】 第26篇:大气衰减——氧气与水汽吸收【含matlab代码】
开发语言·matlab
垆边人似月.4 小时前
华为机试题 :字符串压缩
算法·华为
ggb喔4 小时前
52pojie 的图片工具:为什么无损转换后体积涨了 6 倍、照片方向还是歪的
图像处理·python·算法·计算机视觉·图形渲染·媒体
小小龙学IT4 小时前
Go 语言 cgo 与 C/C++ 互操作深度解析:从 fwlib 直连到工业数采网关实战系列
c语言·c++·golang
菜鸟~noob2334 小时前
【电子战】第25篇:自由空间、双射线与菲涅尔区【含matlab代码】
开发语言·算法·matlab
梅菲塔亚4 小时前
华为云从入门到实战
开发语言·华为云·php
VIP_CQCRE4 小时前
Visual Studio 接入 AI 助手:LMLocal × Ace Data Cloud 配置指南
大模型·api·ai编程·visual studio·acedatacloud
霸道流氓气质4 小时前
幂等性与 Upsert:防止重复操作产生副作用的技术
开发语言·php