Mysql C ++ e aumenta il conflitto di intestazione asio
-
10-07-2019 - |
Domanda
Sembra esserci un conflitto con le intestazioni di Windows tra mysql c-api e boost :: asio.
Se prima includo mysql ottengo:
boost / asio / detail / socket_types.hpp (27): errore fatale C1189: #error: WinSock.h è già stato incluso
#if defined(BOOST_WINDOWS) || defined(__CYGWIN__)
# if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
# error WinSock.h has already been included
# endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
Se includo boost :: asio prima ottengo:
include \ config-win.h (24): avviso C4005: '_WIN32_WINNT': ridefinizione macro
/* 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
Esiste un modo per aggirare questo, e perché mysql sta cercando di forzare la versione di Windows e potenziare cercando di imporre che includa Winsock in ogni caso?
Soluzione
La ridefinizione delle macro è solo un avvertimento. Il tuo codice dovrebbe comunque essere compilato e collegato. Penso che il tuo codice funzionerà anche senza problemi.
Altri suggerimenti
Prova
#include " winsock2.h "
prima di includere mysql e boost :: asio
Se non riesci a trovare un modo per aggirare questo problema, potresti provare a racchiudere l'API MySQL dietro un puntatore opaco come ultima risorsa.