Qt找不到windows API报错:error: LNK2019: 无法解析的外部符号 __imp_OpenClipboard

笔者在开发中出现的bug完整报错如下:

spcm_ostools_win.obj:-1: error: LNK2019: 无法解析的外部符号 __imp_OpenClipboard,函数 "void __cdecl spcmdrv::vCopyToClipboard(char const *,unsigned __int64)" (?vCopyToClipboard@spcmdrv@@YAXPEBD_K@Z) 中引用了该符号

依然是常见的链接不到宏定义/函数的问题,但是这次不同的是,报错的符号来自:C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\um\WinUser.h

也就是windows SDK下的头文件和库。

分析:

  1. 通常来讲出现这个问题首先考虑的原因是编译器的选择,因为这是Visual Studio配置环境时要下载的windows sdk组件,也就是说,只有在MSVC模式下才能用上,MinGW是Qt自带的编译器,是没有这个套件的。所以应该先检查当前的构建套件是不是有效的MSVC20XX。

  2. 然后应该检查windows kits的 Include、Lib、bin 文件是不是添加到了系统的环境变量里

排查了这两个问题以后,报错依然没有消失,说明编译器依然没有找到对应的windows API,笔者尝试使用手动添加LIB和INCLUDE 路径的方式,试图让编译器找到符号对应的头文件,语句如下:

cpp 复制代码
win32 {
    INCLUDEPATH += "C:/Program Files (x86)/Windows Kits/10/Include/10.x.x.x/ucrt"
    INCLUDEPATH += "C:/Program Files (x86)/Windows Kits/10/Include/10.x.x.x/um"
    # 根据需要添加其他目录
}

win32 {
    LIBS += -L"C:/Program Files (x86)/Windows Kits/10/Lib/10.x.x.x/ucrt/x64"
    LIBS += -L"C:/Program Files (x86)/Windows Kits/10/Lib/10.x.x.x/um/x64"
    # 根据需要添加其他目录或特定库文件
}

并无卵用......

经多次失败经验证明,试图通过添加上述语句完成添加外部库,从而让编译器找到库文件,完全行不通!!!!!!编译器不会报错,但是也不会找到里面的lib文件!!!无论是什么库!

这个符号属于Windows API的一部分,通常与用户32库(User32.lib)相关联。只需要在.pro文件中,增加下述语句,就可以了。

cpp 复制代码
win32 {
    LIBS += -lUser32
}

对应地,在使用这个符号的代码文件中,需要引入windows头文件

cpp 复制代码
#include <windows.h>

清除之前的构建,重新构建工程,报错就消失了

相关推荐
Flobby52934 分钟前
Go语言新手村:轻松理解变量、常量和枚举用法
开发语言·后端·golang
nbsaas-boot2 小时前
SQL Server 窗口函数全指南(函数用法与场景)
开发语言·数据库·python·sql·sql server
东方佑2 小时前
递归推理树(RR-Tree)系统:构建认知推理的骨架结构
开发语言·r语言·r-tree
Warren982 小时前
Java Stream流的使用
java·开发语言·windows·spring boot·后端·python·硬件工程
伍哥的传说2 小时前
Radash.js 现代化JavaScript实用工具库详解 – 轻量级Lodash替代方案
开发语言·javascript·ecmascript·tree-shaking·radash.js·debounce·throttle
xidianhuihui3 小时前
go install报错: should be v0 or v1, not v2问题解决
开发语言·后端·golang
架构师沉默3 小时前
Java优雅使用Spring Boot+MQTT推送与订阅
java·开发语言·spring boot
DebugKitty4 小时前
C语言14-指针4-二维数组传参、指针数组传参、viod*指针
c语言·开发语言·算法·指针传参·void指针·数组指针传参
Bio Coder4 小时前
R语言中 read.table 和 read.delim 之间的区别
开发语言·r语言
charlie1145141914 小时前
设计自己的小传输协议 导论与概念
c++·笔记·qt·网络协议·设计·通信协议