上下文:我在 Windows 上使用 Qt 5.9.3,为 MinGW 32 位构建。Qt 部分是一个附带问题 - 问题似乎出在 MinGW 上。MinGW 的版本是 4.3.0,作为 Qt 安装的一部分预构建。
我正在构建一个通过 HID 与 USB 设备通信的库。一切都编译得很好,但在链接阶段失败了
./..\..\object\debug\usb_hid_device.o: In function `ZN8MyApp3USB5Win3213getDevicePathB5cxx11Ell':
<MYPATH>/../../source/win32/usb_hid_device.cpp:99: undefined reference to `HidD_GetAttributes(void*, _HIDD_ATTRIBUTES*)@8'
./..\..\object\debug\usb_hid_device.o: In function `ZN8MyApp3USB5Win3214CHIDDeviceImplC2EllRNS_15LogPerComponentE':
<MYPATH>/../../source/win32/usb_hid_device.cpp:200: undefined reference to `HidD_FlushQueue(void*)@4'
Run Code Online (Sandbox Code Playgroud)
链接器命令是
g++ -shared -mthreads -Wl,-subsystem,windows -Wl,--out-implib,<MYPATH>\bin\debug\libusb_hid_comms.a -o <MYPATH>\bin\debug\usb_hid_comms.dll object_script.usb_hid_comms.Debug -lhid -lsetupapi -LC:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib C:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\libQt5Guid.a C:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\libQt5Cored.a
Run Code Online (Sandbox Code Playgroud)
如果我省略,-lhid我会得到同样的错误。如果我删除-lhid路径和文件名并将其显式设置为libhid.a. 如果我故意输入错误的路径和文件名,则会出现错误,因此我知道命令行已正确解析。但无论出于何种原因,MinGW 似乎没有链接到它自己的库文件之一。
我还尝试删除-lsetupapi,并得到了我期望的链接器错误,其中定义的函数。Qt 库文件也是如此。不过好像是专门为了libhid.a,MinGW 可以看到库文件,但不会与其链接。
还有其他人看过这个吗?或者拥有相同(或相似)版本 MinGW 的其他人可以确认或否认他们可以链接吗libhid.a?或者我正在做的事情明显有问题吗?