Implizite Deklaration der Funktion "getaddrinfo" auf MinGW
Ich habe ein C-Programm, das verwendet getaddrinfo()
. Es funktioniert wie erwartet auf Linux und Mac OS X.
Ich bin in der Mitte der Portierung zu Windows.
Wenn ich es kompilieren (mit MinGW-gcc) bekomme ich folgende Warnungen:
ext/socket/socket.c: In function 'sl_tcp_socket_init':
ext/socket/socket.c:98:5: warning implicit declaration of function 'getaddrinfo' [-Wimplicit-function-declaration]
ext/socket/socket.c:104:9: warning implicit declaration of function 'freeaddrinfo' [-Wimplicit-function-declaration]
Dann die ganze Sache nicht um die Verknüpfung mit undefinierten Referenzen zu getaddrinfo()
und freeaddrinfo()
.
Nun, nach dieser MSDN-Seite, getaddrinfo()
wird unterstützt auf Windows und befindet sich in der header-Datei Ws2tcpip.h
und die Bibliothek-Datei Ws2_32.lib
.
Ich bin auch Ws2tcpip.h
und die Verknüpfung mit -lWs2_32
, so bin ich nicht sicher, warum dies nicht funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie einen Blick auf Zeile 297 der ws2tcpip.h, Sie können sehen, dass es eine überprüfung des Wertes von _WIN32_WINNT.
Nur #define
_WIN32_WINNT
vor Ihr schließt.Wenn Sie möchten, um Ihren code compiler-weit sollten Sie eigentlich auch definieren
NTDDI_VERSION
mit der gleichen OS-version als_WIN32_WINNT
. Ohne, dass die Definition nur_WIN32_WINNT
lassen Sie nicht zu verwendengetaddrinfo()
mit einige Compiler (z.B. Watcom). Es ist besser, wickeln Sie es in der gleichen Weise wie Windows-SDK unterstützt:Angeblich der richtige Weg, dieses Problem zu beheben ist:
Oder vielleicht mehr vernünftig hinzufügen
-DWINVER=WindowsXP
zu IhremCPPFLAGS
.Ref: http://mingw.5.n7.nabble.com/Undefined-reference-to-getaddrinfo-td5694.html
Hinweis: funktionierte nicht für mich allerdings.