Visual Studio 2015:v120 vs v140?

时间:2015-11-11 21:08:24

标签: c++ compiler-errors linker visual-studio-2015 freeglut

仅供参考:Win10,x64

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

然而,从Visual C ++ 2015开始,他们以一种允许它们提供兼容性的方式重新构建了运行时库,但这并没有解决问题的倒退。

请参阅此blog post以及他们发布的有关“通用CRT”的一些后续内容。