Вопрос

Похоже, существует конфликт с заголовками окон между 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 за непрозрачный указатель в крайнем случае.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top