c++ Boost :: asio winsock和winsock 2兼容性问题

我的项目使用了使用winsock.h的windows.h,我需要包含boost:assio,它使用winsock2。所以我收到许多错误说Winsock.h已经包括在内。
我可以定义WIN32_LEAN_AND_MEAN。所以windows.h不会使用winsock。问题是,我需要windows.h来使用它,我只需要Asio来进行异步定时器。我不需要它的winsock2.h。我尝试搜索如何禁用它的winsock2使用,我发现我可以通过定义BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN之前包括boost:asio,但我仍然得到相同的错误。

#include <windows.h>
#define BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN
#include <boost/asio.hpp>

错误

1>c:\program files\boost\boost_1_47\boost\asio\detail\socket_types.hpp(22): fatal error C1189: #error : WinSock.h has already been included

尝试更改订单或包含。从boost / asio.hpp开始,并将windows.h放在它之后。

通常,任何代码库的作者都可以解决兼容性问题,但是如果他们的代码是第一个满足编译器和预处理器,那么它们可以更好地实现。

ACE有一个类似的问题,包括ace / OS.h在任何其他的解决之前。

翻译自:https://stackoverflow.com/questions/9750344/boostasio-winsock-and-winsock-2-compatibility-issue

转载注明原文:c++ Boost :: asio winsock和winsock 2兼容性问题