构建Boost Coroutine2

时间:2017-06-05 09:13:00

标签: c++ boost

因为之前已将其标记为重复:此问题与基本"如何安装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 lib。

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

On Boosts Getting Started页面Coroutine2并未列为"必须建立的"库和解析config.hpp文件后,我提出了定义#define BOOST_COROUTINES2_NO_LIB的想法,这导致了许多未知的符号......

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

4 个答案:

答案 0 :(得分:0)

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

编辑:从boost.coroutine2

中删除子目录'build'

答案 1 :(得分:0)

首先,我发现哪个确切的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

中的一个错误

P.S。通过在我的项目中定义BOOST_ALL_NO_LIB并手动设置必要的库来禁用自动链接,解决了这个问题。

答案 2 :(得分:0)

从MS Visual Studio构建时,我在Boost 1.64中面临同样的问题。 随着Boost 1.65,我不再面对这个问题了。

答案 3 :(得分:0)

您可以将struct course{ char code[7]; char *description; }; 复制到libboost_coroutine-xxx.lib并将其放在lib路径中。因为boost_coroutine2-xxx.lib不使用lib。因此,无论lib中的什么内容都无济于事。