【问题标题】:why or where is BOOST_ASIO_HAS_IOCP defined?为什么或在哪里定义 BOOST_ASIO_HAS_IOCP?
【发布时间】:2014-06-26 14:19:23
【问题描述】:

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

我使用的是 g++ 4.8.1,但我也收到版本 4.6.2 的错误。操作系统是 Windows 7 64 位。我使用带有标签boost-1.55.0的存储库版本(git)。

我过去启动了一些不会发生此类错误的项目,那么为什么或在哪里定义了BOOST_ASIO_HAS_IOCP

【问题讨论】:

    标签: c++ boost boost-asio


    【解决方案1】:

    BOOST_ASIO_HAS_IOCP 可能只是在 Windows 上配置 Boost 时才检测到。

    如果不是,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)
    

    您的 boost 配置的 _WIN32_WINNT 值似乎与构建应用程序期间使用的值不同。

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

    #define _WIN32_WINNT 0x0501 // _WIN32_WINNT_WINXP
    

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

    【讨论】:

    • 是的,这对这个错误有帮助,但实际上在此之后我得到了很多相同类型的新错误:例如BOOST_APPLICATION_TYPE_INDEX_SELECT has not been declared。我的工作机器上是否有许多配置错误的选项?我的意思是我使用来自 git 的未修改的 boost 版本,并尝试使用 zip 版本(版本 1.55.0)(除了将 boost.application 加载到其中)
    • 嗯。让我直截了当地说,您是否只是拒绝了我的回答,因为它没有解决您没有告诉任何人的其他错误?事实上,您甚至没有提到您正在使用外部库(Boost Application)。这值得提出一个新问题,带有指向下载位置的链接和sscce.org
    猜你喜欢
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2021-12-19
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多