Skip to content

Commit 4f46efd

Browse files
TylerMSFTTylerMSFT
authored andcommitted
wording
1 parent d22a6b3 commit 4f46efd

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

docs/porting/binary-compat-2015-2017.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ We've changed this behavior in Visual Studio 2015 and later versions. The runtim
1414

1515
There are three important restrictions on binary compatibility between the v140, v141, v142, and v143 toolsets and minor numbered version updates:
1616

17-
- Binaries created with different versions of the v140, v141, v142, and v143 toolsets can be combined. The key rule is that the linker should only work with inputs built by toolsets that are the same version (or earlier) as itself. This applies to apps, import libraries, and static libraries. In some cases, an import library for an [implicitly linked](../build/linking-an-executable-to-a-dll.md#implicit-linking) DLL built by a later version of the toolset can be linked by an earlier version of the toolset--especially if the import library strictly uses `extern "C"` for the imports/exports. Here are some examples of what this all means:
17+
- Binaries created with different versions of the v140, v141, v142, and v143 toolsets can be combined. The key rule is that the linker should only work with inputs built by toolsets that are the same version (or earlier) as itself. This applies to apps, import libraries, and static libraries. In some cases, an import library for an [implicitly linked](../build/linking-an-executable-to-a-dll.md#implicit-linking) DLL built by a later version of the toolset can be linked using an earlier version--especially if the import library strictly uses `extern "C"` for the imports/exports. Here are some examples of what this all means:
1818
- An app compiled with a 2017 toolset (v141, versions 15.0 to 15.9) can be linked to a static library compiled with Visual Studio 2019 version 16.2 (v142), but the linking must be done using a version 16.2 or later toolset.
1919
- A version 16.2 library can be linked to a version 16.4 app, but only if you use the 16.4 or later toolset.
2020
- Apps and libraries built using VS 2015, 2017, or 2019 can be linked together, but the linking must be done using a version of the toolset that is as recent as, or more recent than, the most recent toolset used to build any of the binaries.
2121
- Given three binaries built with toolsets from VS 2015 version 14.3, VS 2017 version 15.1, and VS 2017 version 15.6, you can link them using any toolset version that is 15.6 or later.
22-
- An example of using an earlier version of the toolset to link an import library built by a later version of the toolset is what happens when you install a newer Windows SDK but then build using an older toolset. It might be possible to link the import library for the newer SDK using an older toolset, especially if the import library strictly uses `extern "C"` for its imports/exports.
22+
- An example of using an earlier version of the toolset to link an import library built by a later version is what happens when you install a newer Windows SDK but then build using an older toolset. It might be possible to link the import library for the newer SDK using an older toolset, especially if the import library strictly uses `extern "C"` for its imports/exports.
2323
- The Redistributable your app uses has a similar binary-compatibility restriction. When you mix binaries built by different supported versions of the toolset, the Redistributable version must be at least as new as the latest toolset used by any app component.
2424
- Static libraries or object files compiled using the [`/GL` (Whole program optimization)](../build/reference/gl-whole-program-optimization.md) compiler switch or linked using [`/LTCG` (Link-time code generation)](../build/reference/ltcg-link-time-code-generation.md) *aren't* binary-compatible across versions, including minor version updates. All object files and libraries compiled using **`/GL`** and **`/LTCG`** must use exactly the same toolset for the compile and the final link. For example, code built by using **`/GL`** in the Visual Studio 2019 version 16.7 toolset can't be linked to code built by using **`/GL`** in the Visual Studio 2019 version 16.8 toolset. The compiler emits [Fatal error C1047](../error-messages/compiler-errors-1/fatal-error-c1047.md).
2525

0 commit comments

Comments
 (0)