2009-08-03 3 views
2

Es scheint zwischen dem mysql c-api und boost :: asio ein Konflikt mit den Fenstern Header zu sein.C++ mysql und steigern Asio Kopf Konflikt

Wenn ich mysql sind erste erhalte ich:

boost/Asio/detail/socket_types.hpp (27): schwerwiegender Fehler C1189: #error: WINSOCK.H bereits aufgenommen worden

#if defined(BOOST_WINDOWS) || defined(__CYGWIN__) 
# if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_) 
# error WinSock.h has already been included 
# endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_) 

Wenn ich boost :: asio sind erste erhalte ich:

include \ config-win.h (24): C4005 Warnung: '_WIN32_WINNT': Makro Redefin

ition
/* 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 

Gibt es eine Möglichkeit, um dieses, und warum versucht mysql die Windows-Version zu zwingen und steigern zu erzwingen versuchen, dass es sind ohnehin seine Selbst Winsock?

Antwort

2

Die Makroredefinition ist nur eine Warnung. Ihr Code sollte weiterhin kompilieren und verknüpfen. Ich denke, dass Ihr Code auch ohne Probleme funktioniert.

3

Versuche

#include "winsock2.h"

vor einschließlich mysql und boost :: asio

+0

Boost enthält in Ordnung, aber mysql gibt, dass durch ein Bündel von Fehlern in Ws2tcpip.h und Mswsock.h gefolgt Warnung –

-1

Wenn Sie nicht einen Weg, um dieses Problem finden, könnten Sie versuchen, die MySQL API Einwickeln hinter einem opaque pointer als letztes.