You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从MinGW32升级到MinGW64时-lhid链接选项失效问题求助

MinGW64下链接HID API失败的解决办法

嘿,我碰到过类似的问题,给你捋捋怎么解决:

首先看你的代码和编译命令,你调用了HidD_GetHidGuid这个HID相关函数,用-lhid链接的时候应该是报了“未定义引用”的错误对吧?

先贴下你的代码方便参考:

#include <windows.h>
#include <hidsdi.h>
int main(int argc, char * argv[]) {
    GUID guidHID;
    HidD_GetHidGuid(&guidHID);
    return 0;
}

还有你的控制台输出(应该后面跟着链接错误信息):

C:\Users[...]>where g++
C:\mingw-w64-7.3.0\i686-7.3.0-posix-dwarf-rt_v5-rev0\mingw32\bin\g++.exe

C:\Users[...]>g++ test.cc -lhid
C:\Users[...]\AppData\Local\Temp\ccXXXXXX.o:test.cc:(.text+0x17): undefined reference to `_imp__HidD_GetHidGuid@4'
collect2.exe: error: ld returned 1 exit status

问题核心在于MinGW64下HID相关的API实际是在setupapi库中,而不是单独的hid库。你之前用MinGW32的时候可能习惯了-lhid,但MinGW-w64的库映射逻辑不一样——HidD_GetHidGuid的实现是在系统的setupapi.dll里,所以链接时需要指定setupapi库。

直接修改编译命令就能解决:

g++ test.cc -lsetupapi

你可以验证下,去你的MinGW64库目录(比如C:\mingw-w64-7.3.0\i686-7.3.0-posix-dwarf-rt_v5-rev0\mingw32\lib)里找,肯定能看到libsetupapi.a,这就是MinGW对应的静态导入库,链接它就能找到HID相关的函数了。

另外提一句,不管你用的是32位(i686)还是64位(x86_64)的MinGW-w64,这个库依赖都是一样的,不用纠结位数,只要用-lsetupapi就对了。

内容的提问来源于stack exchange,提问作者whobbes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:32:29