【问题标题】:Why does this need the Boost lib file?为什么这需要 Boost lib 文件?
【发布时间】:2016-05-26 18:37:24
【问题描述】:

我正在使用 ASIO 库来制作 udp 发送包装器。目的是让另一个应用程序使用它来轻松发送 3 条特定的 udp 消息。

我创建了一个 .lib 文件,它基本上是一个导出的实用程序类,它包装了 ASIO 函数。

为了测试我的库,我还制作了一个小命令行应用程序,它链接到我的库,创建导出的类并调用发送函数。

但是,测试应用程序需要链接到 libboost_system-vc100-mt-gd-1_55.lib,但我创建的实际上包含 Boost 代码的 lib 文件没有。

为什么会发生这种情况,我该如何解决?

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    .lib 文件,静态库,只是一组目标文件,它不是一个可执行实体。它没有链接,因此不需要解析未解析的符号。 只有与其链接的可执行文件或共享库 (DLL) 需要依赖项(在这种情况下是您的测试代码)。

    所以没有问题,也许您打算将您的库捆绑为共享库而不是静态库?

    【讨论】:

    • 是的,谢谢莫蒂。我将其更改为 dll,并且测试应用程序按预期工作。出于某种原因,我认为我创建的 lib 文件将在 boost 库中使用的代码中编译/复制,然后使用它传递给应用程序。
    【解决方案2】:

    大多数 boost 库都依赖于 boost::system,因为使用了 exception/error management

    boost::asio 肯定会使用它。

    测试运行器应用程序需要链接所有内容,因为它将成为(静态或动态链接的)可执行文件,并且所有引用都需要解析。

    【讨论】:

      【解决方案3】:

      Boost::Asio 库(来自同一作者)作为仅标头的独立版本提供。

      查看他的think-async.com 网站了解详细信息和比较。当您不需要(或不想)对 Boost 有链接时依赖时,独立版本很有用。更多详情请参见AsioStandalone 页面。

      FWIW 我将它捆绑为 CRAN 包 AsioHeaders 供 R 程序员使用,因为“无链接”功能使得跨平台使用特别有吸引力。

      您可以类似地为您的应用程序提供仅标头解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        • 2013-12-11
        • 2011-10-20
        • 1970-01-01
        • 2021-07-30
        相关资源
        最近更新 更多