为'_MSC_VER'检测到错误LNK2038不匹配:xxxx.obj中的值'1700'与值'1900'不匹配

时间:2019-01-14 03:01:01

标签: visual-studio-2012 visual-studio-2015 lib

正在将我的项目从VS2012转换为VS2015。但是在某些项目中出现_MSC_VER链接器错误。经过Google长时间的浏览后,我发现问题是由于VS2012中创建的库与VS2015的链接所致。

我如何找出哪个项目导致了错误?在这里,我引用错误: 为“ _MSC_VER”检测到错误LNK2038不匹配:xxxx.obj中的值“ 1700”与值“ 1900”不匹配

检测到'_MSC_VER'的错误LNK2038不匹配:xxxx.obj中的值'1700'与值'1900'不匹配

1 个答案:

答案 0 :(得分:0)

这表示您的某些代码或静态库是使用Visual Studio 2012编译器和C / C ++运行时标头/库构建的,而其他代码是使用Visual Studio 2015编译器和C / C ++运行时标头/库构建的。 / p>

尽管在Visual C ++的发行版之间,某些类型的链接是稳定的(老式C,extern "C"函数,COM接口等),但是所有C ++链接都是依赖于版本的。对于标准C ++库(也称为标准模板库)尤其如此,该库在版本之间更改了内存布局,因此在运行时会崩溃。

为防止这种情况,该库将_MSC_VER链接标记添加到输出代码模块,以在链接时捕获这些不匹配的情况。

  

根据设计,Visual Studio 2017的C / C ++运行时已与Visual Studio 2015 Update 3 C / C ++运行时二进制兼容,以简化采用。这不是正常模式,并且VS 2012与VS 2015/2017不二进制兼容。参见this blog post