gpt4 book ai didi

abi - VS2017 和 VS2015 之间的二进制兼容性

转载 作者:行者123 更新时间:2023-12-02 07:21:40 28 4
gpt4 key购买 nike

这个 SO 帖子: Is Visual-C++-2017 binary compatible with VC++-2015?明明说VS 2017是二进制兼容VS 2015的,甚至官方的表态也很像。

我的问题是,在过去,我清楚地记得每次我尝试链接一个用将不同版本的 MSVC 转换为使用较新版本的 MSVC 构建的 EXE。

然而,二进制(内部)兼容性听起来像是会在运行时而不是链接时炸毁你的脸。

有人能告诉我以前版本的 MSVC 是否确实在版本不匹配时出现生产者链接器错误?这是如何实现的?

编辑

这对打开 WPO/LT​​CG 构建的静态库有何影响?我相信这些会产生中间目标文件(与 COFF 相对),并且 Microsoft 不保证这些中间文件的格式在不同版本的编译器中保持不变。

最佳答案

正如我对链接问题的回答,VS 2015 中的 v140 工具集和 VS 2017 中的 v141 工具集是二进制兼容的。 v141 是作为同一个“系列”的成员构建的,因为对 v140 的所有更新(例如,VS 2015 更新 1、2、3)都在同一个系列中。这是一个有意的设计决策,可帮助开发人员迁移到新版本的 VS,而不必担心必须更改其源代码。

VS 2017 可以支持多个工具集。下一个工具集将不与 v140/v141 二进制兼容。但是您仍然可以在移动代码以与下一个工具集中的新 C++ 功能兼容时安装 v141。

请注意,我们从未支持跨主要版本的二进制兼容性。您不能链接使用 v140 构建的二进制文件和使用 v130 构建的二进制文件,无论 WPO/LT​​CG/etc。是的,它经常有效——我们尽量减少我们库中的破坏性更改,因此经常在主要版本之间链接一些代码不会遇到任何错误。但最终你会遇到一些发生变化的事情,你会看到一个错误。

至于您看到的是链接错误还是运行时错误,这取决于您调用的不兼容库 API。如果 API 的导出形式发生变化——函数名称、参数数量——那么链接器将无法找到它。如果形状相同但行为发生了变化,您可能会以运行时失败告终。

--Andrew Pardoe,MSVC 工具

关于abi - VS2017 和 VS2015 之间的二进制兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44288837/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com