为什么或在哪里定义了BOOST_ASIO_HAS_IOCP?

时间:2014-06-26 14:19:24

标签: c++ boost boost-asio

最近我使用boost asio开始一个新项目,但我永远收到错误: 'SO_UPDATE_CONNECT_CONTEXT' was not declared in this scope。我知道这个错误意味着什么,但我无法找到BOOST_ASIO_HAS_IOCP的定义,这是complete_iocp_connect文件socket_ops.ipp中函数boost-1.55.0的范围所必需的。

我使用的是g ++ 4.8.1,但版本4.6.2也出错了。操作系统是Windows 7 64位。我使用带有标记BOOST_ASIO_HAS_IOCP的存储库版本(git)。

我过去曾经发现过一些没有发生过这样的错误的项目,那么为什么或在哪里定义了{{1}}?

1 个答案:

答案 0 :(得分:2)

在Windows上配置Boost时,可能只检测到{p> BOOST_ASIO_HAS_IOCP

如果不是,boost / asio / detail / config.hpp定义它:

#if !defined(BOOST_ASIO_HAS_IOCP)
# if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
#  if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400)
#   if !defined(UNDER_CE)
#    if !defined(BOOST_ASIO_DISABLE_IOCP)
#     define BOOST_ASIO_HAS_IOCP 1
#    endif // !defined(BOOST_ASIO_DISABLE_IOCP)
#   endif // !defined(UNDER_CE)
#  endif // defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400)
# endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
#endif // !defined(BOOST_ASIO_HAS_IOCP)

似乎您的助推器配置了_WIN32_WINNT的不同值,而不是在构建应用程序时使用的值。

您可以尝试将其定义为0x0501或更高吗?

#define _WIN32_WINNT 0x0501 // _WIN32_WINNT_WINXP

(有点相关的票https://svn.boost.org/trac/boost/ticket/10016