C ++ mysql y aumentar el conflicto de encabezado asio
-
10-07-2019 - |
Pregunta
Parece haber un conflicto con los encabezados de Windows entre mysql c-api y boost :: asio.
Si incluyo mysql primero obtengo:
boost / asio / detail / socket_types.hpp (27): error fatal C1189: #error: WinSock.h ya se ha incluido
#if defined(BOOST_WINDOWS) || defined(__CYGWIN__)
# if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
# error WinSock.h has already been included
# endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
Si incluyo boost :: asio primero obtengo:
include \ config-win.h (24): advertencia C4005: '_WIN32_WINNT': redefinición de 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
¿Hay alguna forma de evitar esto, y por qué mysql está tratando de forzar la versión de Windows y aumentar tratando de forzar que incluya winsock de todos modos?
Solución
La redefinición de macros es solo una advertencia. Su código aún debe compilarse y vincularse. Creo que su código incluso funcionará sin ningún problema.
Otros consejos
Probar
#include " winsock2.h "
antes de incluir mysql y boost :: asio
Si no puede encontrar una manera de solucionar este problema, puede intentar ajustar la API de MySQL detrás de un puntero opaco como último recurso.