Visual Studio 2015:v120 vs v140?

Joh*_*Cox 5 c++ linker compiler-errors freeglut visual-studio-2015

仅供参考: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/C++).但显然v140不会与之前编译器生成的库一起玩.

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

Adr*_*thy 2

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

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

请参阅这篇博文以及他们发布的有关“通用 CRT”的一些后续文章。