Visual Studio 2015 と Visual Studio 2017 の間の C++ バイナリ互換性C++ Binary Compatibility between Visual Studio 2015 and Visual Studio 2017

以前のバージョンの Visual Studio では、バージョンの異なるコンパイラ ツールセットやランタイム ライブラリで構築されたオブジェクト ファイル (OBJ)、スタティック ライブラリ (LIB)、ダイナミック ライブラリ (DLL)、実行可能ファイル (EXE) の間のバイナリ互換性が保証されていませんでした。In previous versions of Visual Studio, binary compatibility between object files (OBJs), static libraries (LIBs), dynamic libraries (DLLs), and executables (EXEs) built by using different versions of the compiler toolset and runtime libraries was not guaranteed. これが Visual Studio 2017 で変わりました。This has changed in Visual Studio 2017. Visual Studio 2015 と Visual Studio 2017 では、C++ ツールセットのメジャー番号が 14 になります (Visual Studio 2015 は v140、Visual Studio 2017 は v141)。In Visual Studio 2015 and Visual Studio 2017, the C++ toolset major number is 14 (v140 for Visual Studio 2015 and v141 for Visual Studio 2017). これは、ランタイム ライブラリといずれかのバージョンのコンパイラでコンパイルされたアプリケーションの両方に、ほとんどの部分において、バイナリ互換性があるという事実を反映するものです。This reflects the fact that both the runtime libraries and the applications compiled with either version of the compiler are--for the most part--binary compatible. つまり、たとえば、Visual Studio 2017 で DLL を作成したら、Visual Studio 2015 でコンパイルしたアプリケーションからそれを利用できます。あるいは、2015 ツールセットでビルドしたアプリケーションで Visual Studio 2017 の再頒布可能ライブラリを利用できます。This means, for example, that you can create a DLL in Visual Studio 2017, and consume it from an application compiled with Visual Studio 2015, or use the Visual Studio 2017 redistributable libraries with your application built by using the 2015 toolset.

このルールには例外が 2 つあります。There are two exceptions to this rule. 以下の場合、バイナリ互換性は保証されません。Binary compatibility is not guaranteed in these cases:

  1. スタティック ライブラリまたはオブジェクト ファイルが /GL コンパイラ スイッチでコンパイルされる場合。When static libraries or object files are compiled with the /GL compiler switch.

  2. アプリケーションのコンパイルとリンクで使用されたツールセットよりもバージョンが新しいツールセットで構築されたライブラリを使用する場合。When consuming libraries built with a toolset whose version is greater than the toolset used to compile and link the application. たとえば、ツールセット 19.12 でコンパイルしてリンクされたプログラムは、19.0 から 19.12 でコンパイルされたライブラリを使用することができます。For example, a program that is compiled and linked with toolset 19.12 can consume libraries that are compiled with 19.0 up through 19.12. Visual Studio 2013 またはそれ以前で生成されたライブラリと 19.x のプログラムのリンクはサポートされていません。Linking 19.x programs with libraries produced by Visual Studio 2013 or earlier is not supported.

参照See Also

Visual C++ の変更履歴Visual C++ change history