erreur de compilation winsock, il ne peut pas trouver les structures addrinfo et certaines fonctions relatives
J'ai juste commencé à apprendre le winsock par le biais de la "Beej guide de programmation du réseau de" réserver". Je suis à la programmation sous windows et en l'exécutant à travers gcc. C'est juste une commencer à écrire mon premier programme serveur, mais il me donne ces erreurs lorsque j'essaie de compiler.
/* Server */
#include <iostream>
#include <windows.h>
#include <winsock2.h>
using namespace std;
const int winsockVersion = 2;
#define BACKLOG 10
#define PORT 3000
int main(void){
WSADATA wsadata;
if (WSAStartup(MAKEWORD(winsockVersion,0),&wsadata) == 0){
struct addrinfo hints, *res;
memset(&hints,0,sizeof hints);
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
if ( getaddrinfo(NULL,PORT,&hints,&res) == 0 ){
cout<<"-Call to get addrinfo successful!." << endl;
}
cout<<"res af_family" << res->ai_family << endl;
}
//clear stuff
if( WSACleanup() != 0){
cout<<"-WSACleanup unsuccessful" << endl;
}else{
cout<<"-WSACleanup successful" << endl;
}
return 0;
}
ce sont les erreurs que je reçois
g++ -o server.exe server.cpp -lws2_32
Process started >>>
server.cpp: In function `int main()':
server.cpp:20: error: aggregate `addrinfo hints' has incomplete type and cannot be defined
server.cpp:25: error: `AI_PASSIVE' was not declared in this scope
server.cpp:27: error: `getaddrinfo' was not declared in this scope
server.cpp:31: error: invalid use of undefined type `struct addrinfo'
server.cpp:20: error: forward declaration of `struct addrinfo'
server.cpp:54:2: warning: no newline at end of file
<<< Process finished.
Ne pas les structures et les fonctions définis dans windows.h ou winsock.h?.
SOLUTION
MODIFIER
pour quelqu'un qui trébuche sur ce, ajoutez
#define _WIN32_WINNT 0x501
#include <ws2tcpip.h>
en haut de votre source si getaddrinfo dit que sa non déclarées.
source d'informationauteur silent
Vous devez vous connecter pour publier un commentaire.
Vous voulez probablement
#include <ws2tcpip.h>
. Rappelez-vous que avant de Débordement de Pile, Google est ton ami pour ce genre de questions : vous obtiendrez une réponse immédiate à partir de MSDN !MSDN dit que nous devrions
#include <ws2tcpip.h>
mais dansws2tcpip.h
j'ai trouvé ce bout de code:cela signifie, que
_WIN32_WINNT
est défini plus bas que_WIN32_WINNT_WINXP
mais quand j'ai essayé d'inclurewspiapi.h
j'ai eu"no such file or directory"
. A mon sens, c'est une faute de MinGW, où les différentes parties de la bibliothèque de versions incompatibles.Vous devez
#define _WIN32_WINNT _WIN32_WINNT_WINXP
sur votre propre, avant de les inclurews2tcpip.h
Méfiez-vous! Votre comprend mal. Le problème est que
windows.h
comprend déjàwinsock.h
etwinsock2.h
puis re-définit des structures et des fonctions résultant en un grand nombre d'erreurs de compilation. Déplacer lewindows.h
inclure ci-dessous lawinsock2.h
comprendre, ou tout simplement supprimer lewindows.h
comprennent au total,winsock2.h
comprendwindows.h
.J'ai pu obtenir que cela fonctionne avec la liste suivante comprend, pragma, et définit...
La liste des includes pour cette réponse sont présentés dans un article de Microsoft:
Winsock Comprend
C'est de travailler pour moi: