C ++ mysql et conflit avec les en-têtes asio
-
10-07-2019 - |
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?
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.