这是我第二天遇到这个令人讨厌的问题。 测试代码我尝试编译:
#include <windows.h>
#include <setupapi.h>
#include <initguid.h>
#include <devguid.h>
int main(void)
{
HDEVINFO device_info_set = SetupDiGetClassDevs(
(const GUID *) &GUID_DEVCLASS_PORTS,
NULL,
NULL,
DIGCF_PRESENT);
return 0;
}
mingw输出:
loleq@loleq-Pc MINGW32 /c/Users/loleq/Downloads/openpst/openpst/sahara/lib/libopenpst/lib/serial/examples
$ gcc --version
gcc.exe (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 5.3.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
loleq@loleq-Pc MINGW32 /c/Users/loleq/Downloads/openpst/openpst/sahara/lib/libopenpst/lib/serial/examples
$ gcc -lsetupapi -lhid test.c
C:\opt\msys2_64\tmp\ccJZHvjA.o:test.c:(.text+0x36): undefined reference to `_imp__SetupDiGetClassDevsA@16'
collect2.exe: error: ld returned 1 exit status
主机系统是Win7 64bit,我没有安装任何额外的库,即DDK左右...我相信缺少的引用应该由libsetupapi.a(-lsetupapi)处理,当然这在MinGW库中提供。 有什么建议? 顺便说一句:MinGW我现在正在使用的是Qt。
答案 0 :(得分:0)
问题似乎是由于调用MinGW gcc二进制文件时的参数排序。
我刚刚读过某个地方,在使用MinGW时需要最后指定库,因此你的命令应该是:
$ gcc test.c -lsetupapi -lhid