提升链接错误 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"

本文关键字:nt6 mt v2s 不匹配 v2 abi log LNK2038 错误 boost 链接      更新时间:2023-10-16

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

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(上静态链接,具有多线程支持

  • v2_mt_nt6在 Windows Vista 或更高版本(版本 6(上动态链接,具有多线程支持

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

如果静态链接到 Boost.Log(通过.lib文件或类似文件(,则不得定义这两个宏中的任何一个。1

这意味着您可以删除额外的预处理器定义(因为您尝试链接到静态库(或使用动态库版本的 Boost(例如,请参阅此处了解如何在 Windows 上进行设置(。


1请注意,某些库会完全忽略这些标志。Boost.Log似乎是少数几个如果这些宏配置错误而实际导致问题的人之一