2

mysql c-api 和 boost::asio 之间的 windows 标头似乎存在冲突。

如果我首先包含 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它自己呢?

4

3 回答 3

3

尝试

#include "winsock2.h"

在包括 mysql 和 boost::asio 之前

于 2009-08-03T13:24:34.170 回答
2

宏重新定义只是一个警告。您的代码仍应编译和链接。我认为您的代码甚至可以毫无问题地工作。

于 2009-08-06T13:01:24.150 回答
0

如果您找不到解决此问题的方法,您可以尝试将 MySQL API 包装在不透明指针后面作为最后的手段。

于 2009-08-03T14:09:54.977 回答