对“_GetAdaptersAddresses@20”的未定义引用 - 但我包含了 -liphlpapi

2024-03-01

我在用着gcc under cygwin编写一些调用的代码GetAdaptersAddresses from iphlpapi.h在我的代码中我设置了_WIN32_WINNT高于要求的0x0501在我添加的链接器行上-liphlpapi但链接器仍然失败,并显示以下消息:

gcc -liphlpapi build/obj/*.o -Wall -Wextra -o build/bin/asdf.exe src/asdf.cpp
/tmp/ccdjLPVY.o:asdf.cpp:(.text+0x153): undefined reference to `_GetAdaptersAddresses@20'
collect2: ld returned 1 exit status

一些片段来自asdf.cpp:

#if _WIN32_WINNT < 0x0501
  #warning _WIN32_WINNT was set lower than 0x0501, fixing
  #undef _WIN32_WINNT
  #define _WIN32_WINNT 0x0501
#endif
#include <winsock2.h>
#include <iphlpapi.h>

我知道他们就在那儿:该死的:

strings /usr/i686-pc-mingw32/sys-root/mingw/lib/libiphlpapi.a  | sort | uniq | grep GetAdapters
__imp__GetAdaptersAddresses@20
__imp__GetAdaptersInfo@8
_GetAdaptersAddresses@20
_GetAdaptersInfo@8
GetAdaptersAddresses
GetAdaptersInfo

$strings /usr/lib/w32api/libiphlpapi.a  | sort | uniq | grep GetAdapters
__imp__GetAdaptersAddresses@20
__imp__GetAdaptersInfo@8
_GetAdaptersAddresses@20
_GetAdaptersInfo@8
GetAdaptersAddresses
GetAdaptersInfo

有人看到我错过的东西了吗?

编辑:回答

# Change the order, put the linker options last:
# Before:
gcc -liphlpapi build/obj/*.o -Wall -Wextra -o build/bin/asdf.exe src/asdf.cpp
# After:
gcc            build/obj/*.o -Wall -Wextra -o build/bin/asdf.exe src/asdf.cpp -liphlpapi

正如中所解释的这个问题 https://stackoverflow.com/questions/10970356/undefined-reference-to-mysql-init,gcc 参数的顺序很重要。您需要将库包含移至依赖于它的对象之后。

So gcc build/obj/*.o -liphlpapi ...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对“_GetAdaptersAddresses@20”的未定义引用 - 但我包含了 -liphlpapi 的相关文章

随机推荐