【发布时间】:2018-09-07 08:49:57
【问题描述】:
上下文:我在 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'
链接器命令是
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
如果我省略 -lhid 我会得到同样的错误。如果我删除-lhid 并将路径和文件名显式设置为libhid.a,我也会遇到同样的错误。如果我故意输入错误的路径和文件名,则会出现错误,因此我知道命令行正在正确解析。但无论出于何种原因,MinGW 似乎没有链接到它自己的库文件之一。
我还尝试删除-lsetupapi,但我得到了我期望在那里定义的函数的链接器错误。 Qt 库文件也是如此。但似乎专门针对libhid.a,MinGW 可以看到库文件,但不会与之链接。
还有其他人看过吗?或者其他任何拥有相同(或相似)版本的 MinGW 的人可以确认或否认他们可以与libhid.a 链接吗?还是我所做的事情明显有问题?
【问题讨论】:
-
MinGW 库的路径是什么?路径中有空格吗?
-
@MihaylA.A 该路径在默认的 Qt 安装目录中,为
C:\Qt\Qt5.9.3\Tools\mingw530_32\bin。里面没有空格。 (是的,我过去也被那个咬过!:)