Visual Studio 2013 及更早版本中的 Microsoft C++ (MSVC) 生成工具不能保证主要版本的二进制兼容性。 不能链接对象文件、静态库、动态库和由这些生成工具的不同版本生成的可执行文件。 ABI、对象格式和运行时库不兼容。
我们在 Visual Studio 2015 及更高版本中改变了此行为。 由其中任一版本的编译器编译的运行时库和应用具有二进制兼容性。 它反映在 MSVC 生成工具的主版本号中,该编号自 Visual Studio 2015 起的所有版本都从 14 开始。 (生成工具版本为 v140 for Visual Studio 2015、v141 for 2017、v142 for 2019 和 v143 for 2022)。 假设你具有 Visual Studio 2015 生成的第三方库。 仍可在 Visual Studio 2017、2019、2022 或 2026 生成的应用程序中使用它们。 无需重新编译匹配的版本。 最新版本的 Microsoft Visual C++ 可再发行程序包(可再发行程序包)适用于所有版本。
对二进制兼容性的限制
v140、v141、v142、v143 和 v145 生成工具和次要版本号更新之间的二进制兼容性有三个重要限制:
- 可以组合使用不同版本的 v140、v141、v142、v143 和 v145 生成工具创建的二进制文件。 关键规则是链接器应仅使用由与其版本相同或兼容的生成工具生成的输入进行工作。 这适用于应用、导入库、静态库和 LINK 输入文件中所述的其他文件。 在某些情况下,可以将一个由较新版本生成工具构建的隐式链接 DLL 的导入库与较早版本的生成工具进行链接,特别是在导入库严谨使用
extern "C"进行导入/导出时。 下面举例说明了这一切的含义:- 使用 2017 生成工具(v141 版本 15.0 到 15.9)编译的应用可以链接到使用 Visual Studio 2022 版本 17.8(v143)编译的静态库,但必须使用版本 17.8 或更高版本生成工具完成链接。
- 使用 VS 2015、2017、2019、2022 和 2026 生成的应用和库可以链接在一起,但是,必须使用一个与生成任何传递给链接器的二进制文件所使用的最晚生成工具版本一样新或更新的生成工具版本来完成链接。 例如,给定使用 VS 2015 版本 14.3、VS 2017 版本 15.9 和 VS 2019 版本 16.11 生成的三个二进制文件,可以使用 16.11 或更高版本的任何生成工具版本链接它们。
- 如果使用较新的生成工具生成 DLL,则导入库有时可以与较旧的生成工具一起使用(如果所有导出都遵循 C 语言调用约定(
extern "C")。 但是,唯一正式支持的案例是使用较新的 Windows SDK 和较旧的生成工具。
- 应用使用的可再发行程序包具有类似的二进制兼容性限制。 混合由不同支持版本的生成工具生成的二进制文件时,可再发行组件版本必须至少与任何应用组件使用的最新生成工具一样新。
- 使用
/GL(全程序优化)编译器开关编译或是使用/LTCG(链接时间代码生成)链接的静态库或对象文件不在各个版本间二进制兼容(包括次要版本更新)。 使用/GL和/LTCG编译的所有目标文件和库必须使用完全相同的构建工具进行编译和最终链接。 例如,使用/GLVisual Studio 2019 版本 16.7 生成工具生成的代码无法链接到在/GLVisual Studio 2019 版本 16.8 生成工具中生成的代码。 编译器会发出错误 C1047。
从 Visual Studio 2015 及更高版本升级 Microsoft Visual C++ 可再发行程序包
对于 Visual Studio 2015、2017、2019、2022 和 2026,我们保留了 Microsoft Visual C++ 可再发行组件包的主版本号。 这意味着一次只能安装可再发行程序包的一个实例。 较新版本会覆盖已安装的任何较旧版本。 例如,一个应用可能会从 Visual Studio 2015 安装可再发行程序包。 然后,另一个应用从 Visual Studio 2026 安装了可再发行包。 2026 版本会覆盖旧版本,但由于它们与二进制兼容,早期应用仍可正常运行。 我们确保最新版本的可再发行程序包具有所有最新的功能、安全更新和 bug 修补程序。 这便是为什么我们始终建议升级到最新可用版本。
同样,已安装了较新版本时,无法安装较旧的可再发行程序包。 如果尝试,则安装程序会报告错误。 例如,如果在已安装 2026 版本的计算机上安装 2022 Redistributable,则会看到如下所示的错误:
0x80070666 - Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel.
此错误是设计使然。 建议保持安装最新版本。 请确保安装程序可以在无提示的情况下从此错误中恢复。
重要
最新 Visual C++ Redistributable for Visual Studio 中不再提供对 Windows XP 的运行时库支持。 支持 Windows XP 的最后一个可再发行程序包是版本 16.7(文件版本为 14.27.29114.0)。 如果使用更高版本的可再发行程序包部署 Windows XP 应用或应用更新到更高版本的可再发行程序包,应用则不会运行。 若要了解详细信息以及如何获取支持 Windows XP 的可再发行程序包版本,请参阅配置适用于 Windows XP 的程序。
另请参阅
Visual C++ 更改历史记录
最新受支持的 Visual C++ 可再发行程序包下载
如何审核 Visual C++ 运行时版本使用情况
生命周期常见问题解答 - Visual C++ 可再发行组件库和运行时库