繁体   English   中英

构建 Boost 日志库

[英]Building Boost Log Library

我正在将 boost 升级到 1.81.0 版,并遇到了 boost 日志库未解决的依赖项。 链接器需要这样的符号:

错误 LNK2001:未解析的外部符号“class std::basic_ostream<char,struct std::char_traits > & __cdecl boost::log::v2s_mt_nt62::operator<<<char,struct std::char_traits >(class std::basic_ostream <char,struct std::char_traits > &,class boost::log::v2s_mt_nt62::attribute_name 常量 &)

在 boost changelog 中,我发现了一条注释:

2.23,Boost 1.78 一般更改:在 Windows 上,当为 Windows 8 或更高版本构建库时,库将在版本命名空间中使用 nt62 标记来表示目标操作系统 ABI。 例如,版本命名空间可以命名为 v2_mt_nt62。 此名称将成为库导出的所有符号的一部分。 在构建 Boost 和您的代码以请求最低目标 Windows 版本时,始终使用 BOOST_USE_WINAPI_VERSION 宏。

但我正在使用以下构建命令行:

./b2.exe toolset=msvc address-model=64 variant=release link=static threading=multi runtime-link=static --stagedir='./' --cxxflags=/std:c++latest --cxxflags=/D_WIN32_WINNT=0x0A00 --cxxflags=/DBOOST_USE_WINAPI_VERSION=0x0A00

在我看来,指出了 Windows 10 SDK API 版本。 但是在 libboost_log-vc143-mt-s-x64-1_81.lib 上执行的 DUMPBIN 实用程序输出看起来像:

void __cdecl boost::log::v2s_mt_nt6::aux::attach_attribute_name_info(class boost::exception &,class boost::log::v2s_mt_nt6::attribute_name const &))

其中 boost 日志命名空间是“v2s_mt_nt6”。 我究竟做错了什么? Andrey Semashev你怎么看?

  1. cxxflags是一个 Boost.Build 特性,而不是一个选项。 它在命令行中不应有前导破折号。
  2. 构建 Boost 时不需要指定cxxflags来定义宏,而是使用define=BOOST_USE_WINAPI_VERSION=0x0A00 define也是一个特性,它也应该没有前导破折号。
  3. 您不需要使用cxxflags来指定目标 C++ 版本。 您可以改用cxxstd=latest
  4. 在构建代码时也不要忘记定义BOOST_USE_WINAPI_VERSION=0x0A00

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM