boost link 错误 LNK2038:“boost_log_abi”“v2s_mt_nt6”与“v2_mt_nt6”不匹配

boost link error LNK2038: “boost_log_abi” “v2s_mt_nt6” doesn't match “v2_mt_nt6"

这个 link 错误是什么意思?以及如何修复它

error LNK2038: “boost_log_abi” “v2s_mt_nt6” doesn't match  “v2_mt_nt6"

我试过了

  ADD_DEFINITIONS(-DBOOST_ALL_DYN_LINK)
  ADD_DEFINITIONS(-DBOOST_LOG_DYN_LINK)
  ADD_DEFINITIONS(-DBOOST_USE_WINAPI_VERSION=0x601)

您的 Boost.Log 库似乎是使用与主程序不同的标志构建的。

config.hpp我们可以看出这些ABI名称的含义:

  • v2s_mt_nt6 在 Windows Vista 或更高版本(版本 6)

    [=45= 上静态 linked,支持多线程]
  • v2_mt_nt6 动态 linked,支持多线程,在 Windows Vista 或更高版本(版本 6 )

BOOST_LOG_DLL 宏决定使用两个路径中的哪一个。如果定义了 BOOST_LOG_DYN_LINKBOOST_ALL_DYN_LINK 中的任何一个,则定义它。

如果你静态地link反对Boost.Log(通过.lib文件或类似文件),你不能定义这两个宏。1

这意味着您可以删除额外的预处理器定义(因为您正在尝试 link 到静态库)或使用 Boost 的动态库版本(例如 here如何在 Windows).

上进行设置

1 注意一些库ignore those flags outright。如果这些宏配置错误,Boost.Log 似乎是为数不多的实际会导致问题的人之一