未明确引用`_imp__SetupDiGetClassDevsA @ 16' (即使是-lsetupapi)

时间:2017-09-17 09:39:08

标签: c++ c mingw

这是我第二天遇到这个令人讨厌的问题。 测试代码我尝试编译:

#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。

1 个答案:

答案 0 :(得分:0)

问题似乎是由于调用MinGW gcc二进制文件时的参数排序。

我刚刚读过某个地方,在使用MinGW时需要最后指定库,因此你的命令应该是:

$ gcc test.c -lsetupapi -lhid