我对 VS2010 和 VS2012 之间编译库的二进制兼容性感到困惑。我想迁移到 VS2012,但是许多封闭源代码的纯二进制 SDK 仅适用于 VS2010,例如用于连接硬件设备的 SDK。
传统上,据我所知,Visual Studio 对编译器版本非常挑剔,在 VS2010 中,您无法链接到为 VS2008 编译的库。
我现在感到困惑的原因是,我正在迁移到 VS2012 的过程中,并且我尝试了一些项目,最令我惊讶的是,其中许多都可以毫无问题地跨版本工作。
注意:我不是在谈论 v100 模式,据我所知,它只是 VS2010 编译引擎上的 VS2012 GUI。
我说的是在VS2012中打开一个VS2010的解决方案,点击更新,看看会发生什么。
当链接到一些更大的库时,比如 boost,编译不起作用,因为有编译器版本检查,它们会引发错误并中止编译。其他一些库只是在缺少功能时中止。这是我所期望的行为。
另一方面,许多库工作正常,没有错误或额外的警告。
这怎么可能?VS2012 是否以特殊方式制作以保持与 VS2010 库的二进制兼容性?它是否取决于动态与静态链接?
还有最重要的问题:即使在编译时没有出现错误,我是否可以相信编译器在将 VS2012 项目链接到 VS2010 编译库时不会出现任何错误?