在Boost项目中,当要使用asio库时,一般需要以下方式调用头文件:
#include <boost/asio.hpp>
但是如果直接调用的话, 一般会提示以下错误。
fatal error C1189: #error : WinSock.h has already been included
网上说,一般采用以下解决方法:
1、在包含Windows.h前定义宏WIN32_LEAN_AND_MEAN,就OK了(WIN32_LEAN_AND_MEAN表示不包含一些极少使用和偏门的资料)
2、在包含Windows.h前包含winsock2.h
3、在包含Windows.h前包含asio.hpp
我的项目采用以下头文件(并未包含Windows.h):
#include <boost/thread.hpp>
#include <boost/asio.hpp>
int main()
{
......
return 0;
}
经过仔细研究,发现在#include <boost/thread.hpp>前面添加如下宏定义即可。
#define WIN32_LEAN_AND_MEAN
此时,项目如下:
#define WIN32_LEAN_AND_MEAN
#include <boost/thread.hpp>
#include <boost/asio.hpp>
int main()
{
......
return 0;
}