正在将我的项目从VS2012转换为VS2015。但是在某些项目中出现_MSC_VER链接器错误。经过Google长时间的浏览后,我发现问题是由于VS2012中创建的库与VS2015的链接所致。
我如何找出哪个项目导致了错误?在这里,我引用错误: 为“ _MSC_VER”检测到错误LNK2038不匹配:xxxx.obj中的值“ 1700”与值“ 1900”不匹配
检测到'_MSC_VER'的错误LNK2038不匹配:xxxx.obj中的值'1700'与值'1900'不匹配
答案 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。