2009-08-03 3 views
2

Il semble y avoir un conflit avec les en-têtes de fenêtres entre mysql c-api et boost :: asio.Conflit d'en-tête mysql et boost asio C++

Si je mysql d'abord j'inclus obtenir:

boost/ASIO/détail/socket_types.hpp (27): erreur fatale C1189: #error: Winsock.h a déjà été inclus

#if defined(BOOST_WINDOWS) || defined(__CYGWIN__) 
# if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_) 
# error WinSock.h has already been included 
# endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_) 

Si je boost :: asio inclus premier je reçois:

include \ config-win.h (24): avertissement C4005: '_WIN32_WINNT': Redefin macro ition

/* Defines for Win32 to make it compatible for MySQL */ 
#ifdef __WIN2000__ 
/* We have to do this define before including windows.h to get the AWE API 
functions */ 
#define _WIN32_WINNT  0x0500 
#else 
/* Get NT 4.0 functions */ 
#define _WIN32_WINNT  0x0400 
#endif 

Y at-il une façon de contourner cela, et pourquoi MySQL tente de forcer la version Windows et stimuler essayer d'appliquer d'inclure WINSOCK son auto de toute façon?

Répondre

2

La redéfinition de la macro est uniquement un avertissement. Votre code devrait toujours compiler et lier. Je pense que votre code fonctionnera sans aucun problème.

3

Essayez

#include "winsock2.h"

avant d'inclure MySQL et boost :: asio

+0

boost inclut bien, mais mysql donne cet avertissement suivi d'un tas d'erreurs dans ws2tcpip.h et mswsock.h –

-1

Si vous ne pouvez pas trouver un moyen de contourner ce problème, vous pouvez essayer enroulant l'API MySQL derrière un opaque pointer en dernier recours.

Questions connexes