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错误。

你可能感兴趣的:(visual,studio,c++,ide)