C++ 升压链路错误LNK2038:&x201C;boost_log_abi”“;v2s mt nt6和x201D;不';t匹配“;v2“新界北6号”;

C++ 升压链路错误LNK2038:&x201C;boost_log_abi”“;v2s mt nt6和x201D;不';t匹配“;v2“新界北6号”;,c++,windows,boost,visual-studio-2015,C++,Windows,Boost,Visual Studio 2015,这个链接错误是什么意思?如何修复它 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库似乎是使用与主程序不

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

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库似乎是使用与主程序不同的标志构建的

从中,我们可以看出这些ABI名称的含义:

  • v2s\u mt\u nt6
    在Windows Vista或更高版本(版本6)上通过多线程支持静态链接

  • v2\u mt\u nt6
    在Windows Vista或更高版本(版本6)上通过多线程支持动态链接

BOOST\u LOG\u DLL
宏决定使用这两个路径中的哪一个。如果定义了
BOOST\u LOG\u DYN\u LINK
BOOST\u ALL\u DYN\u LINK
中的任何一个链接,则定义该链接

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

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



请注意,有些库。Boost.Log似乎是少数几个在这些宏配置错误时会导致问题的问题之一

我在使用b2构建Boost时没有定义Boost\u Log\u DOXYGEN\u PASS,为什么是v2\u mt\u nt6而不是v2\u mt\u nt6您可以分享一些关于如何设置构建的上下文吗(您链接的文件或实际失败的构建命令)?我怀疑你链接到了一个静态构建的Boost版本,但是我需要更多的数据来支持upi下载了一个预构建的Boost版本,现在它的工作,我在从Boost源代码构建生成动态库时遇到了一些错误。非常感谢。所以
v2s\u mt\u nt6
中的
s
表示静态?是的。您构建的boost很可能最终生成了静态库——有很多静态库,您没有注意到它们之间的差异,但是boost.Log会带来麻烦。我会将此作为答案发布,以便其他人在搜索时可以找到它。