C ++ mysqlおよびboost asioヘッダーの競合
-
10-07-2019 - |
質問
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バージョンを強制し、winsockに自己を含めるよう強制しようとするのですか?
解決
マクロの再定義は単なる警告です。コードは引き続きコンパイルおよびリンクする必要があります。 あなたのコードは問題なく動作すると思います。
他のヒント
試す
#include" winsock2.h"
mysqlとboost :: asioを含める前
この問題を回避する方法が見つからない場合は、MySQL APIを最後の手段としての不透明なポインター。
所属していません StackOverflow