I'm using gcc
under cygwin
to write some code that calls GetAdaptersAddresses
from iphlpapi.h
in my code I've set _WIN32_WINNT
above the required 0x0501
and on the linker line I've added -liphlpapi
but the linker is still failing with the following message:
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
Some snippets from 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>
I know they're there darn it:
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
Is anyone seeing what I've missed?
# 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
As explained in this question, the order of gcc arguments matters. You need to move the library inclusion to after the objects that depend on it.
So gcc build/obj/*.o -liphlpapi ...
try adding #pragma comment(lib, "Iphlpapi.lib")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With