Référence indéfinie à getaddrinfo

Je reçois cette erreur depuis assez longtemps et Google n’a pas été d’une grande aide non plus.

Je suis un débutant dans la programmation Winsock et j’essaie d’apprendre des ressources en ligne. J’essaie de créer un serveur simple en utilisant les détails sur le site Web MSDN. Chaque fois que je comstack le code (MinGW), j’obtiens l’erreur mentionnée dans le titre ( Undefined reference to getaddrinfo ). Ci-dessous le code:

 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #define WINVER WindowsXP #include  #include  #include  #include  #include  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; } 

Je comstack avec la commande suivante:

 gcc msdn_np.c -o msdn_np.exe -lWS2_32 

N’est-ce pas le même problème qu’ici?

http://programmingrants.blogspot.com/2009/09/tips-on-undefined-reference-to.html

En gros, n’oubliez pas de créer un lien avec Ws2_32.lib (le message provient de l’éditeur de liens, ce qui devrait en être la raison), mais vous semblez déjà le faire.

… si vous travaillez avec une ancienne version des outils de programmation #define _WIN32_WINNT 0x0501 que vous avez une version supérieure à XP en mettant #define _WIN32_WINNT 0x0501 avant d’inclure les en-têtes (peu probable encore de nos jours, mais peut-être).

Le pourrait être d’autres problèmes simples. La convention normale (Unix) pour les bibliothèques est de les append avec lib. Désormais, la signification de -lWS32_32 serait de rechercher un fichier dont le nom est libWS32_32.a . Il est probable qu’il ne le trouve pas car il manque le chemin d’access au répertoire contenant la bibliothèque. Vous pouvez append un -L suivi du chemin d’access au bon répertoire. Sinon, vous n’avez même pas besoin de -l pour vous lier à une bibliothèque, il suffit de mettre le chemin complet de la bibliothèque (dans ce cas, le vrai nom du fichier tel qu’il apparaît sur le système de fichiers) devrait également fonctionner.

Le problème peut aussi être lié au chemin. Par exemple, des problèmes peuvent survenir si le chemin d’access à la bibliothèque contient des espaces. Si tel est le cas, vous pouvez essayer de placer vos fichiers de bibliothèque dans un répertoire portant un nom plus simple.

Veuillez donner votre avis sur votre configuration actuelle (dans quel répertoire est le fichier de bibliothèque) et sur ce que vous avez réellement essayé. Vous pouvez également essayer de définir les variables d’environnement LIBS et LIBPATH (le moyen le plus simple est probablement de le faire à partir d’un fichier makefile).

http://msdn.microsoft.com/en-us/library/ms738520(v=vs.85).aspx

Jetez un coup d’œil aux choses sous “remarques”. Il est possible que vous essayiez d’utiliser une version ANSI-C de la fonction lorsque vous ne comstackz pas en tant qu’ANSI-C.

WindowsXP été défini dans w32api.h , vous devez #include avant votre #define WINVER .