未定义引用`_GetAdaptersAddresses @ 20′ – 但我包括-liphlpapi

我在cygwin下使用gcc编写一些代码,在我的代码中调用来自iphlpapi.h GetAdaptersAddresses我已经将_WIN32_WINNT设置_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  #include  

我知道他们在那里蠢蠢欲动:

 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 

正如这个问题所解释的那样,gcc参数的顺序很重要。 您需要将库包含移到依赖它的对象之后。

所以gcc build/obj/*.o -liphlpapi ...

尝试添加#pragma comment(lib,“Iphlpapi.lib”)