2009-08-03 94 views
2

似乎與mysql c-api和boost :: asio之間的windows頭文件有衝突。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_) 

如果包括我的boost :: ASIO第一,我得到:

包括\ 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的自身?

回答

2

宏重新定義只是一個警告。你的代碼仍然應該編譯和鏈接。 我認爲你的代碼甚至可以毫無問題地工作。

3

嘗試

#include "winsock2.h"

包括MySQL和boost :: ASIO

+0

boost包含很好,但mysql給出了警告,後面跟着ws2tcpip.h和mswsock.h中的一堆錯誤 – 2009-08-03 13:36:22

-1

如果你不能找到一個辦法來解決這個問題之前,你可以嘗試包裝MySQL的API的背後opaque pointer作爲最後的手段。