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