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的依赖,解决标识符找不到的问题。

相关推荐
Navigator_Z12 小时前
LeetCode //C - 1089. Duplicate Zeros
c语言·算法·leetcode
在繁华处12 小时前
Java从零到熟练(四):面向对象基础
java·开发语言
Unbelievabletobe12 小时前
解决了股票api接口盘后数据更新慢的问题
大数据·开发语言·python
cany100012 小时前
C++ -- 可变参数模板
c++
不会C语言的男孩13 小时前
C++ Primer 第2章:变量和基本类型
开发语言·c++
在繁华处14 小时前
Java从零到熟练(三):流程控制
java·开发语言·python
云泽80815 小时前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
wlsh1515 小时前
Go 迭代器
算法
Tri_Function15 小时前
简单图论大学习
c++
语戚16 小时前
力扣 3161. 块放置查询:线段树解法(Java 实现)
java·算法·leetcode·面试·线段树·力扣·