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

前端之家收集整理的这篇文章主要介绍了c – 未定义引用`_GetAdaptersAddresses @ 20′ – 但我包括-liphlpapi前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在cygwin下使用 gcc编写一些代码,在我的代码调用来自iphlpapi.h的GetAdaptersAddresses我已经将_WIN32_WINNT设置为高于所需的0x0501,并且在链接器行上我添加了-liphlpapi但是链接器仍然失败了以下内容信息:
  1. gcc -liphlpapi build/obj/*.o -Wall -Wextra -o build/bin/asdf.exe src/asdf.cpp
  2. /tmp/ccdjLPVY.o:asdf.cpp:(.text+0x153): undefined reference to `_GetAdaptersAddresses@20'
  3. collect2: ld returned 1 exit status

来自asdf.cpp的一些片段:

  1. #if _WIN32_WINNT < 0x0501
  2. #warning _WIN32_WINNT was set lower than 0x0501,fixing
  3. #undef _WIN32_WINNT
  4. #define _WIN32_WINNT 0x0501
  5. #endif
  6. #include <winsock2.h>
  7. #include <iphlpapi.h>

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

  1. strings /usr/i686-pc-mingw32/sys-root/mingw/lib/libiphlpapi.a | sort | uniq | grep GetAdapters
  2. __imp__GetAdaptersAddresses@20
  3. __imp__GetAdaptersInfo@8
  4. _GetAdaptersAddresses@20
  5. _GetAdaptersInfo@8
  6. GetAdaptersAddresses
  7. GetAdaptersInfo
  8.  
  9. $strings /usr/lib/w32api/libiphlpapi.a | sort | uniq | grep GetAdapters
  10. __imp__GetAdaptersAddresses@20
  11. __imp__GetAdaptersInfo@8
  12. _GetAdaptersAddresses@20
  13. _GetAdaptersInfo@8
  14. GetAdaptersAddresses
  15. GetAdaptersInfo

谁有人看到我错过了什么?

编辑:答案

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

解决方法

正如 this question中所解释的那样,gcc参数的顺序很重要.您需要将库包含移到依赖它的对象之后.

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

猜你在找的C&C++相关文章