Visual Studio不同版本之间的C++库兼容性

Visual Studio 版本之间的 C++ 二进制兼容性

Visual Studio 2013 和更早版本中的 Microsoft c + + (MSVC) 编译器工具集不保证主要版本之间的二进制兼容性。 不能链接对象文件、静态库、动态库以及由这些工具集的不同版本生成的可执行文件。 Abi、对象格式和运行库是不兼容的。

我们在 Visual Studio 2015 及更高版本中更改了此行为。 任何这些版本的编译器编译的运行时库和应用都是二进制兼容的。 这会反映在 c + + 工具集的主编号中,从第14次开始,自 Visual Studio 2015 起,所有版本均为14。 (工具集版本适用于 Visual Studio 2015、2017、、2019和 2022) v143。 假设你有 Visual Studio 2015 生成的第三方库。 你仍可以在 Visual Studio 2017、2019或2022构建的应用程序中使用它们。 无需使用匹配的工具集进行重新编译。 最新版本的 Microsoft Visual C++ 可再发行组件包 (可再发行组件) 适用于所有这些包。

二进制兼容性的限制

对于 v140、v141、v142 和 v143 工具集和次要编号版本更新之间的二进制兼容性,有三个重要的限制:

  • 可以混合使用不同版本的 v140、v141、v142 和 v143 工具集生成的二进制文件。 但是,必须使用最新的工具集至少与应用中的最新二进制链接。 下面是一个示例:可以将使用任何2017工具集 (v141,版本15.0 到 15.9) 编译的应用链接到使用 Visual Studio 2019 版本 16.2 (v142) 编译的静态库。 只需使用版本16.2 或更高版本的工具集链接它们即可。 只要你使用的是16.4 或更高版本的工具集,你就可以将版本16.2 库链接到16.4 版应用。

  • 应用使用的可再发行组件具有类似的二进制兼容性限制。 当混合使用不同的受支持版本的工具集生成的二进制文件时,可再发行版本必须至少与任何应用组件所用的最新工具集相同。

  • 使用 /GL(完全程序优化) 编译器开关 或 使用/LTCG (链接时代码生成)进行链接 的静态库或对象文件在不同版本之间(包括次要版本更新)不兼容。 使用/GL/LTCG选项编译的所有.obj文件和库必须使用完全相同的用于编译和链接工具集。 例如,在 Visual Studio 2019 版本16.7 工具集中启用/GL的情况下生成的代码无法链接到在 Visual Studio 2019 版本16.8 工具集中启用/GL的情况下生成的代码。 编译器将报C1047错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值