C++ 与MinGW(v.4.3.0)和libhid链接的问题

C++ 与MinGW(v.4.3.0)和libhid链接的问题,c++,qt,gcc,mingw,hid,C++,Qt,Gcc,Mingw,Hid,上下文:我在Windows上使用Qt5.9.3,为MingW32位构建。Qt部分是一个次要问题——问题似乎出在MinGW上。MinGW的版本是4.3.0,作为Qt安装的一部分提供预构建 我正在建一个图书馆,通过HID与USB设备进行通信。一切都编译得很好,但在与 ./..\..\object\debug\usb_hid_device.o: In function `ZN8MyApp3USB5Win3213getDevicePathB5cxx11Ell': <MYPATH>/../..

上下文:我在Windows上使用Qt5.9.3,为MingW32位构建。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'
/。\..\object\debug\usb\u hid\u device.o:在函数'ZN8MyApp3USB5Win3213getDevicePathB5cxx11Ell'中:
/../../source/win32/usb_hid_device.cpp:99:未定义对“HidD_GetAttributes(void*,_HidD_ATTRIBUTES*)@8”的引用
../..\..\object\debug\usb\u hid\u device.o:在函数“zn8myapp3usb5win3214hiddevicemplc2ellns\u 15logpercomponent”中:
/../../source/win32/usb_hid_device.cpp:200:对“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
g++-shared-mthreads-Wl,-subsystem,windows-Wl,--out implib\bin\debug\libusb\u hid\u comms.a-o\bin\debug\usb\u hid\u comms.dll object\u script.usb\u hid\u comms.debug-lhid\u-comms-lhid-LC:\Qt\Qt5.9.3\5.9.3\mingw53\lib C:\Qt\Qt\Qt5.9.3\qt53\qtw53\qt5guid.a
如果我省略了
-lhid
,我会得到同样的错误。如果删除
-lhid
并将路径和文件名显式设置为
libhid.a
,也会出现相同的错误。如果我故意输入错误的路径和文件名,它会出现错误,因此我知道命令行得到了正确的解析。但不管出于什么原因,MinGW似乎没有链接到它自己的一个库文件

我还尝试删除了
-lsetupapi
,得到了在其中定义的函数预期的链接器错误。同样,Qt库文件也是如此。但似乎特别是对于
libhid.a
,MinGW可以看到库文件,但不会链接到它


还有谁见过这个吗?或者其他拥有相同(或类似)版本MinGW的人是否可以确认或否认他们可以链接到
libhid.a
?或者我所做的有什么明显的错误吗?

我刚刚找到了答案。我自己发布了一个答案,以便将来其他人知道,因为我认为这仍然是一个人们可能想知道的有效问题

问题在于include文件
hidsdi.h
。大多数其他引入Win32 API调用的头文件在函数声明周围都有
extern“C”
。然而,这一个没有!结果是,我们最终用C++名字来命名链接符,而不是链接符号前面的C样式“。” 解决办法是使用

extern "C"
{
    #include <hidsdi.h>
}
extern“C”
{
#包括
}
然后一切正常


hidsdi.h
的版本和旧版本的MinGW(我从中移植)在函数声明周围提供了保护。不过,它看起来在新版本中消失了。

我刚刚找到了答案。我自己发布了一个答案,以便将来其他人知道,因为我认为这仍然是一个人们可能想知道的有效问题

问题在于include文件
hidsdi.h
。大多数其他引入Win32 API调用的头文件在函数声明周围都有
extern“C”
。然而,这一个没有!结果是,我们最终用C++名字来命名链接符,而不是链接符号前面的C样式“。” 解决办法是使用

extern "C"
{
    #include <hidsdi.h>
}
extern“C”
{
#包括
}
然后一切正常


hidsdi.h
的版本和旧版本的MinGW(我从中移植)在函数声明周围提供了保护。然而,在新版本中,它似乎已经消失了。

到MinGW libs的路径是什么?路径中有空格吗?@MihaylA.A路径在默认的Qt安装目录中,路径为
C:\Qt\Qt5.9.3\Tools\mingw530\u 32\bin
。那里没有空间。(是的,我过去也被它咬过!:)通往明威图书馆的路是什么?路径中有空格吗?@MihaylA.A路径在默认的Qt安装目录中,路径为
C:\Qt\Qt5.9.3\Tools\mingw530\u 32\bin
。那里没有空间。(是的,我过去也被它咬过!)