【问题标题】:Build Boost Coroutine2构建 Boost Coroutine2
【发布时间】:2017-06-05 09:12:59
【问题描述】:

由于之前已将其标记为重复:此问题与基本的“如何安装 boost...”无关。 Boost 已安装并且除 coroutine2 之外的所有库都正常工作。所以这是一个 coroutine2 的问题。

在尝试编译我的项目时,我收到以下链接器错误:

LNK1104 cannot open file 'libboost_coroutine2-vc140-mt-gd-1_64.lib'

检查后我发现文件丢失了,尽管我使用以下命令构建了 boost:

b2 install --build-type=complete msvc -mt

所以我尝试使用以下命令手动构建它:

b2 install --build-type=complete msvc -mt --with-coroutine2

发生了一些有趣的事情:它构建了它所构建的 Boost.Context(已经由第一个命令构建),但看不到 Coroutine2 库。

现在我尝试在安装了 boost 1.61 的另一台计算机上运行该项目 - 它运行完美!在检查了 coroutine2/detail/config.hpp(它决定了链接哪个库)后,我注意到 boost 1.61 想要加载协程库,而 boost 1.64 需要 coroutine2 库...

在 Boosts Getting Started 页面上 Coroutine2 没有被列为“必须构建”的库,在剖析 config.hpp 文件后,我想出了定义 #define BOOST_COROUTINES2_NO_LIB 的想法,这导致了许多未知符号...

我不知道我还能做什么,请帮助,亲爱的专业人士:)

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    首先,我发现了哪个确切的 cpp 正在生成 LNK1104 错误。然后我启用了“预处理到文件”选项以在预处理文件中查看发出链接请求的人。然后宾果游戏!

    #line 401 "C:\\libdev4\\boost\\boost/config/auto_link.hpp"
    #pragma comment(lib,  "boost_coroutine2" "-" "vc140" "-mt" "-gd" "-" "1_64" ".lib")
    

    所以,这是 boost 1.64 auto_link.hpp 中的一个错误

    附言通过在我的项目中定义 BOOST_ALL_NO_LIB 并手动设置必要的库来禁用自动链接,可以解决问题。

    【讨论】:

      【解决方案2】:

      boost.coroutine2 是一个仅包含头文件的库 - 未创建 libboost_coroutine2-vc140-mt-gd-1_64.lib。您应该检查项目的链接器标志并删除对 libboost_coroutine2 的引用。

      编辑:从 boost.coroutine2 中删除子目录“build”

      【讨论】:

      • 没有链接器标志,也没有对 libboost_coroutine2 的引用。完全相同的项目在另一台安装了 boost 1.61 的 PC 上编译。是否有可能在提升构建过程中设置了一些导致问题的标志?当我检查链接器选项卡 (MSVC) 中的输入库时,显然没有一个 boost 库。所有链接都是通过提升自动链接发生的(我假设)
      • 我会尝试更新版本的 boost - 我记得 boost.cooutien2 的早期版本在 Jamfile(Makefile 等效项)中有一个错误。
      • 不幸的是 1.64 是最新版本。旧版本 1.61 可以完美运行!
      • @mattideluxe:正如我告诉你的那样——boost.coroutine2 是一个只有头文件的库——你不会得到为 boost.coroutine2 生成的库(共享对象)。你必须让你的构建环境相信你不需要 libboost_coroutine2-vc140-mt-gd-1_64.lib。
      • 除了“#define BOOST_COROUTINES2_NO_LIB”我还能做什么?这使它不使用库,但会导致未知符号错误。
      【解决方案3】:

      从 MS Visual Studio 构建时,我在 Boost 1.64 中遇到了同样的问题。 有了 Boost 1.65,我就不再面临这个问题了。

      【讨论】:

        【解决方案4】:

        你可以把libboost_coroutine-xxx.lib复制到boost_coroutine2-xxx.lib,放到lib路径下。因为oroutine2 没有使用库。所以无论lib中的什么内容都没有区别。

        【讨论】:

          猜你喜欢
          • 2019-07-31
          • 2016-12-23
          • 1970-01-01
          • 2018-02-26
          • 2016-05-27
          • 2010-10-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多