仅供引用: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构建例程的黑暗领域,那么我可以放弃这个问题,但是我也想知道为什么它们不能一起工作。

最佳答案

从历史上看,Visual C++在每个主要版本的运行时库之间都破坏了二进制兼容性。这提供了一些改进的实现方式的自由,而不受先前版本的ABI的约束。
但是,从Visual C++ 2015开始,它们已经重新构造了运行时库,其方式应允许它们向前提供兼容性,但这不能解决向后的问题。
请参阅此blog post以及他们发布的有关“通用CRT”的一些后续信息。

关于c++ - Visual Studio 2015 : v120 vs v140?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33659878/

10-11 19:34