boost 链接器错误错误工具集

问题描述 投票:0回答:2

有很多与此相关的问题,但到目前为止还没有一个解决方案适合我的情况。 我使用 VS 2017 使用工具集 14.1 构建了 boost 1.63 库

构建 boost 库的命令行是:

bjam --toolset=msvc-14.1 --build-dir="libs"  --stagedir="x64" --build-type=complete stage  address-model=64 threading=multi link=static runtime-link=static

构建文件夹中的第二个库是

libboost_atomic-vc141-mt-sgd-1_63.lib

我使用boost的项目指向这个文件夹。但与 VS 2017 链接 并且选择的工具集 14.1 会引发错误:

LINK : fatal error LNK1104: cannot open file 'libboost_atomic-vc140-mt-sgd-1_63.lib'

如您所见,只有工具集不正确。 是否有额外的开关以及在哪里可以找到?谢谢你。

一条评论:我使用project-config.jam设置构建了bjam.exe

using msvc : 14.1;

并且库的构建速度快如闪电:所有 x64 库都低于 20 秒!

c++ boost linker
2个回答
3
投票

Boost 1.63 尚未与 Visual Studio 2017 兼容,因此您需要手动执行一些操作来修复问题。为了确保它选择正确的库文件,您需要对

auto_link.hpp
进行编辑,可在
boost/config
中找到。更改这些行:

# elif defined (BOOST_MSVC)

     // vc14:
#  define BOOST_LIB_TOOLSET "vc140"

对此:

# elif defined (BOOST_MSVC) && (BOOST_MSVC < 1910)

     // vc14:
#  define BOOST_LIB_TOOLSET "vc140"

# elif defined (BOOST_MSVC)

     // vc15:
#  define BOOST_LIB_TOOLSET "vc141"

然后对 boost 库进行彻底的重新编译,并用此修改后的版本替换包含中的此文件的原始版本。


0
投票

如果所使用的 boost 版本比所使用的工具集版本旧,则可能会发生这种情况。在这种情况下,

<boost/config/auto_link.hpp>
中的工具集检测代码可能会得到无效的工具集版本,例如编写检测代码时最后已知的工具集版本。

您可能想要按照此答案中所述编辑中的工具集检测代码,或者您可以只显式定义

BOOST_LIB_TOOLSET
宏。你可以这样做,例如在您的 MSVC++ 项目设置中或在 中,如此处所述。

BOOST_LIB_TOOLSET 宏是在 标头中自动定义的宏,它对应于库文件名中的工具集后缀。所以对于你的情况应该是

BOOST_LIB_TOOLSET=vc141

您还可以通过定义

BOOST_ALL_NO_LIB
来禁用自动链接 Boost 功能,如同一页面中所述。在这种情况下,您需要在链接选项中明确指定所需的 boost 库。

© www.soinside.com 2019 - 2024. All rights reserved.