C ++ mysql и конфликт конфликтов заголовка asio
-
10-07-2019 - |
Вопрос
Похоже, существует конфликт с заголовками окон между mysql c-api и boost :: asio.
Если я сначала включу mysql, я получу:
boost / asio / detail / socket_types.hpp (27): фатальная ошибка C1189: #error: WinSock.h уже включен
#if defined(BOOST_WINDOWS) || defined(__CYGWIN__)
# if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
# error WinSock.h has already been included
# endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
Если я сначала добавлю boost :: asio, я получу:
include \ config-win.h (24): предупреждение C4005: '_WIN32_WINNT': переопределение макроса
/* 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
Есть ли какой-то способ обойти это, и почему mysql пытается принудительно установить версию Windows и boost, чтобы она все равно включала winsock?
Решение
Переопределение макроса является лишь предупреждением. Ваш код должен все еще компилироваться и ссылаться. Я думаю, что ваш код будет работать без проблем.
Другие советы
Попробуйте
#include " winsock2.h "
перед включением mysql и boost :: asio
Если вы не можете найти способ обойти эту проблему, вы можете попробовать обернуть MySQL API за непрозрачный указатель в крайнем случае.