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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top