mysql C ++ e impulsionar asio conflito cabeçalho
-
10-07-2019 - |
Pergunta
Parece haver um conflito com os cabeçalhos janelas entre o mysql c-api e boost :: asio.
Se eu incluem mysql primeiro eu recebo:
boost / ASIO / detail / socket_types.hpp (27): Erro fatal C1189 de erro: #Error: WINSOCK.H já foi incluído
#if defined(BOOST_WINDOWS) || defined(__CYGWIN__)
# if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
# error WinSock.h has already been included
# endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
Se eu incluir boost :: asio primeiro eu recebo:
incluem \ config-win.h (24): Aviso C4005: '_WIN32_WINNT': redefinição 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
Existe alguma maneira de contornar isso, e porque é mysql tentando forçar a versão do Windows e aumentar a tentar impor que incluem WINSOCK sua auto afinal?
Solução
A redefinição macro é apenas um aviso. Seu código ainda deve compilar e link. Eu acho que o código vai mesmo trabalhar sem qualquer problema.
Outras dicas
Tente
#include "winsock2.h"
antes de incluir mysql e boost :: asio
Se você não pode encontrar uma maneira de contornar este problema, você pode tentar envolver o API MySQL atrás de um opaca ponteiro como um último recurso.