【问题标题】:Boost asio library for networking (http client)Boost asio 网络库(http 客户端)
【发布时间】:2018-03-07 00:46:30
【问题描述】:

我正在尝试使用 Visual Studio 2015 在 C++ 中编译一个实用程序,它需要 Boost asio 库来进行网络(http 请求)。 相同的解决方案包括一个构建此 Boost asio 库的项目,但我必须下载 boost_1_59_0.7z 文件。到目前为止,我能够下载它并且构建得很好,但我发现生成的构建像 11 个不同名称的库(libboost_chrono-vc140-mt-sgd-1_59.lib,还有 10 个但使用日期时间、文件系统、日志设置等...)。 另一方面,需要这个库的项目正在寻找一个名为 boost_1_59_0.lib 的库,所以我的问题是我如何知道哪些生成的库适合用于网络(我没有看到任何名称与asio或网络有关...)。 我将不胜感激任何有关这方面的指导。

谢谢 格斯

【问题讨论】:

    标签: c++ boost-asio


    【解决方案1】:

    Boost.Asio doc:

    默认情况下,Boost.Asio 是一个只有头文件的库。但是,一些开发人员可能更喜欢使用单独编译的源代码来构建 Boost.Asio。为此,请将#include <boost/asio/impl/src.hpp> 添加到程序中的一个(并且只有一个)源文件中,然后使用在项目/编译器设置中定义的BOOST_ASIO_SEPARATE_COMPILATION 构建程序。或者,BOOST_ASIO_DYN_LINK 可以定义为构建单独编译的 Boost.Asio 作为共享库的一部分。

    因此,默认情况下,Asio 仅是头文件,并且对于大多数用途而言,不需要链接到任何 Boost 库。

    但是,boost Asio 确实依赖于其他 boost 组件,如 Boost.System、Boost.Thread(not nessesary) 等,以支持更好的异步操作和一些错误代码( boost::system::error_code 和 boost::system: :system_error)。

    请参阅herehere 了解更多信息。

    【讨论】:

      【解决方案2】:

      boost asio 仅标头库,但 asio 网络依赖于 boost system 获取错误消息,这不是仅标头库。 简而言之,您的代码需要链接到boost-system,并且对于asio 计时器,它可能还需要boost-chrono

      注意:boostVisual Studio 中支持autolinking;所以你只需要将boost库目录的路径添加到Library Directories配置属性中,例如:

      $BOOST_ROOT\stage\lib
      

      其中$BOOST_ROOT 是您安装boost 的目录。

      您无需将boost-systemboost-chrono 添加到Linker->Input->Additional Dependencies。但是,您可能需要添加Windows 网络库,例如:wsock32ws2_32

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-22
        • 1970-01-01
        • 1970-01-01
        • 2018-09-05
        • 2016-06-19
        • 2016-03-10
        • 1970-01-01
        相关资源
        最近更新 更多