Visual Studio 2015: v120 vs v140?

Visual Studio 2015: v120 vs v140?

本文关键字:vs v140 v120 Studio 2015 Visual      更新时间:2023-10-16

FYI:Win10,x64

我今天开始试用Visual Studio 2015,在弄清楚如何运行C/C++部件后,我尝试加载一个使用非官方glsdk的大型个人项目。我尝试构建,但得到了链接器错误。它抱怨freeglutD.lib、glloadD.lib和glutil.lib中引用了未解析的外部符号。它还抱怨我自己的文件中_MSC_VER不匹配。

我在网上做了一些研究,搞砸了2013和编译器版本(项目属性->通用->平台工具集)-2013年的v120和2015年的v140-并且能够用v140重建glsdk(由于缺少文件,不包括glmesh)。然后它运行良好。

问题:为什么会这样?我认为由标准兼容编译器创建的静态lib文件可以与其他版本的标准兼容编译器一起使用(在本例中,v120上的C/C++和v140上的C/CC++)。但显然v140不会和以前的编译器制作的库一起玩。

如果这只是VS构建例程的黑暗地带,那么我可以放弃这个问题,但我也想知道为什么它们不能一起工作。

从历史上看,Visual C++破坏了每个主要版本的运行时库之间的二进制兼容性。这为改进实现提供了一些自由,而不受以前版本的ABI的约束。

然而,从Visual C++2015开始,他们重新构建了运行时库,使其能够向前提供兼容性,但这并不能解决向后的问题。

看看这篇博客文章和他们发布的关于";通用CRT"