对 `_imp__SetupDiGetClassDevsA@16' 的未定义引用(即使使用 -lsetupapi)
Posted
技术标签:
【中文标题】对 `_imp__SetupDiGetClassDevsA@16\' 的未定义引用(即使使用 -lsetupapi)【英文标题】:undefined reference to `_imp__SetupDiGetClassDevsA@16' (even with -lsetupapi)对 `_imp__SetupDiGetClassDevsA@16' 的未定义引用(即使使用 -lsetupapi) 【发布时间】:2017-09-17 09:39:07 【问题描述】:这是我为这个讨厌的问题苦苦挣扎的第二天。 我尝试编译的测试代码:
#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 64 位,我没有安装任何额外的库,即 DDK 左右...我相信丢失的引用应该由 libsetupapi.a (-lsetupapi) 处理,这当然存在于 MinGW 库中。 有什么建议么? 顺便说一句:我现在使用的 MinGW 是由 Qt 提供的。
【问题讨论】:
我记得前段时间读过一些东西,建议在指定源文件后放置库(可能是 MinGW 的东西),所以你可以试试gcc test.c -lsetupapi -lhid
。
哇,先生,你是我的英雄。看起来它真的解决了这个问题。谢谢约翰。
很高兴听到这个消息,我会继续提交它作为答案。
What is an undefined reference/unresolved external symbol error and how do I fix it?的可能重复
Your linkage consumes libraries before the object files that refer to them回答
【参考方案1】:
问题似乎是由于调用 MinGW gcc 二进制文件时的参数排序造成的。
我前段时间在某处读到,使用 MinGW 时需要最后指定库,因此您的命令应该是:
$ gcc test.c -lsetupapi -lhid
【讨论】:
以上是关于对 `_imp__SetupDiGetClassDevsA@16' 的未定义引用(即使使用 -lsetupapi)的主要内容,如果未能解决你的问题,请参考以下文章
OpenAL 问题,未定义对“_imp__alGenBuffers”的引用
TCL - 对 g++ 的 `_imp__Tcl_ResetResult' 的未定义引用
如何在链接到静态库的 DEV-CPP 中构建控制台应用程序时解决对 _imp__** 的未定义引用?
错误: - 未定义引用 `_imp__GetStockObject@4' 和未定义引用 `_imp__SetBkMode@8'
vs2017.unresolved external symbol __imp__fprintf&__imp____iob_func