Undefined reference to getaddrinfo
Habe ich immer diese Fehler seit geraumer Zeit jetzt, und Google hat nicht viel geholfen.
Ich bin ein Neuling auf Winsock-Programmierung und versuche zu lernen von online-Ressourcen. Ich bin versucht, zu erstellen eine einfache server mithilfe der Informationen auf der MSDN-website. Immer wenn ich den code kompilieren (MinGW), bekomme ich die Fehlermeldung im Titel genannten (Undefined reference to getaddrinfo
). Unten ist der code:
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#define WINVER WindowsXP
#include <windows.h>
#include <winsock2.h>
#include <winsock.h>
#include <ws2tcpip.h>
#include <stdio.h>
int main() {
WSADATA wsaData;
int iResult;
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed: %d\n", iResult);
return 1;
}
#define DEFAULT_PORT "27015"
struct addrinfo *result = NULL, *ptr = NULL, hints;
ZeroMemory(&hints, sizeof (hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
//Resolve the local address and port to be used by the server
iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
if (iResult != 0) {
printf("getaddrinfo failed: %d\n", iResult);
WSACleanup();
return 1;
}
return 0;
}
Ich bin kompilieren mit folgendem Befehl:
gcc msdn_np.c -o msdn_np.exe -lWS2_32
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es nicht das gleiche problem wie hier ?
http://programmingrants.blogspot.com/2009/09/tips-on-undefined-reference-to.html
Grundsätzlich vergessen Sie nicht, um die Verknüpfung mit Ws2_32.lib (die Nachricht wird vom linker, also sollte der Grund sein), aber Sie scheinen zu tun, dass bereits.
... wenn Sie arbeiten mit einer alten version des windows-Programmier-tools, die sagen, Sie haben eine version höher ist als die von XP, indem Sie
#define _WIN32_WINNT 0x0501
vor, einschließlich Kopf (kaum noch notwendig sein, partnerschaftsmodelle, aber vielleicht).Das könnte auch andere einfache Probleme. Normal (Unix) Konvention für Bibliotheken ist die Stelle mit lib. Künftig, das heißt für -lWS32_32 wäre die Suche nach einer Datei, deren name
libWS32_32.a
. Es ist wahrscheinlich nicht finden, denn es fehlt der Pfad zu dem Verzeichnis mit der Bibliothek. Man könnte hinzufügen, ein -L gefolgt vom Pfad zum richtigen Verzeichnis. Alternativ können Sie brauchen noch nicht mal -l-um eine Verbindung mit einer Bibliothek, nur setzen Sie den vollständigen Pfad zu der Bibliothek (in diesem Fall den tatsächlichen Namen der Datei, wie es scheint, auf filesystem) sollte auch funktionieren.Kann das problem auch Weg im Zusammenhang. Zum Beispiel können Probleme tritt auf, wenn der Pfad zur Bibliothek Leerzeichen enthält. Wenn dies so ist, können Sie versuchen, indem Sie die library-Dateien in einem Verzeichnis mit einem einfacheren Namen.
Bitte geben Sie ein feedback von Ihrer tatsächlichen Konfiguration (in welchem Verzeichnis ist die Bibliothek-Datei) und was du tatsächlich versucht. Sie könnten auch versucht, die Einstellung LIBS Umgebungsvariablen und LIBPATH (einfachste Weg ist wahrscheinlich damit zu tun, dass aus einem makefile).
http://msdn.microsoft.com/en-us/library/ms738520(v=vs. 85).aspx
Werfen Sie einen Blick auf die Sachen unter "Bemerkungen". Es ist möglich, dass Sie versuchen, zu verwenden ein ANSI-C version der Funktion, wenn Sie sich nicht kompilieren, wie ANSI-C.
WindowsXP
definiert wurde, inw32api.h
Sie müssen#include <w32api.h>
vor Ihrer#define WINVER
.