有很多与此相关的问题,但到目前为止还没有一个解决方案适合我的情况。 我使用 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 秒!
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 库进行彻底的重新编译,并用此修改后的版本替换包含中的此文件的原始版本。
如果所使用的 boost 版本比所使用的工具集版本旧,则可能会发生这种情况。在这种情况下,
<boost/config/auto_link.hpp>
中的工具集检测代码可能会得到无效的工具集版本,例如编写检测代码时最后已知的工具集版本。
您可能想要按照
BOOST_LIB_TOOLSET
宏。你可以这样做,例如在您的 MSVC++ 项目设置中或在 BOOST_LIB_TOOLSET 宏是在
BOOST_LIB_TOOLSET=vc141
您还可以通过定义
BOOST_ALL_NO_LIB
来禁用自动链接 Boost 功能,如同一页面中所述。在这种情况下,您需要在链接选项中明确指定所需的 boost 库。