2009-08-03 14 views
2

mysql c-apiとboost :: asioの間のウィンドウヘッダーと競合しているようです。C++ mysqlとboost asioヘッダーの衝突

私が最初にMySQLを含めた場合、私が取得:

ブースト/ ASIO /詳細/ socket_types.hpp(27):致命的なエラーC1189:#エラー: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_) 

私はブースト:: ASIO最初が含まれている場合は、私が取得:C4005警告: '_WIN32_WINNT':マクロredefin

は\ CONFIG-win.h(24)を含み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 

はこの周りのいくつかの方法があり、そしてなぜMySQLは、Windowsのバージョンを強制し、それはとにかくその自己のWinsock含めることを強制しようとして後押ししようとしていますか?

答えて

2

マクロの再定義は警告に過ぎません。コードはコンパイルしてリンクする必要があります。 あなたのコードは問題なく動作すると思います。

3

は、MySQLなどの前

#include "winsock2.h"

を試してみて、後押し:: ASIO

+0

boostにはfineが含まれていますが、mysqlは警告の後ろにws2tcpip.hとmswsock.hのエラーが続きます –

-1

をあなたはこの問題を回避する方法を見つけることができない場合、あなたはopaque pointer後ろのMySQL APIをラップしてみてください最後の手段として。