Question

Il semble y avoir un conflit avec les en-têtes de Windows entre mysql c-api et boost :: asio.

Si j'inclus d'abord MySQL, je reçois:

  

boost / asio / detail / socket_types.hpp (27): erreur irrécupérable 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 j'inclus boost :: asio, je reçois d'abord:

  

include \ config-win.h (24): avertissement C4005: '_WIN32_WINNT': redéfinition des macros

/* 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

Existe-t-il un moyen de contourner ce problème et pourquoi mysql essaie-t-il de forcer la version Windows et de le forcer à faire en sorte qu'il inclue WinSock de toute façon?

Était-ce utile?

La solution

La redéfinition des macros n’est qu’un avertissement. Votre code doit toujours être compilé et lié. Je pense que votre code fonctionnera même sans problème.

Autres conseils

Essayez

#include " winsock2.h "

avant d'inclure mysql et boost :: asio

Si vous ne trouvez pas le moyen de résoudre ce problème, vous pouvez essayer de placer l'API MySQL derrière un pointeur opaque en dernier recours.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top