Visual Studio のバージョン間の C++ バイナリ互換性

Visual Studio 2013 以前の Microsoft C++ (MSVC) コンパイラツールセットでは、メジャーバージョン間のバイナリの互換性は保証されません。 これらのツールセットの異なるバージョンによって構築されたオブジェクトファイル、スタティックライブラリ、ダイナミックライブラリ、および実行可能ファイルをリンクすることはできません。 ABIs、オブジェクト形式、およびランタイムライブラリには互換性がありません。

Visual Studio 2015 以降のバージョンでは、この動作が変更されています。 これらのいずれかのバージョンのコンパイラによってコンパイルされたランタイムライブラリとアプリは、バイナリと互換性があります。 これは、2015 Visual Studio 以降のすべてのバージョンで14で始まる C++ ツールセットのメジャー番号に反映されます。 (ツールセットのバージョンは、Visual Studio 2015 の場合は v140、2017の場合は v141、2019の場合は v142、2022の場合は v143 です。 Visual Studio 2015 によって構築されたサードパーティ製のライブラリがあるとします。 Visual Studio 2017、2019、または2022でビルドされたアプリケーションで引き続き使用できます。 一致するツールセットを使用して再コンパイルする必要はありません。 Microsoft Visual C++ 再頒布可能パッケージ (再頒布可能パッケージ) の最新バージョンは、すべてのバージョンで動作します。

バイナリ互換性に関する制限事項

V140、v141、v142、v143 の各ツールセットとマイナー番号付きバージョンの更新の間のバイナリの互換性には、次の3つの重要な制限があります。

  • さまざまなバージョンの 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 コンパイルと最終的なリンクにまったく同じツールセットを使用する必要があります。 たとえば、Visual Studio 2019 バージョン16.7 ツールセットのを使用してビルドされたコードは、 /GL/GL Visual Studio 2019 バージョン16.8 ツールセットのを使用してビルドされたコードにリンクすることはできません。 コンパイラは、 致命的なエラー C1047を生成します。

Visual Studio 2015 以降から Microsoft Visual C++ 再頒布可能パッケージをアップグレードする

Microsoft Visual C++ 再配布可能なメジャーバージョン番号は、Visual Studio 2015、2017、2019、および2022でも同じように保持されています。 つまり、再頒布可能パッケージのインスタンスは一度に1つしかインストールできません。 新しいバージョンは、既にインストールされている古いバージョンを上書きします。 たとえば、1つのアプリで Visual Studio 2015 から再頒布可能パッケージをインストールできます。 次に、別のアプリが Visual Studio 2022 から再頒布可能パッケージをインストールします。 2022バージョンでは古いバージョンが上書きされますが、バイナリに互換性があるため、以前のアプリは正常に動作します。 最新バージョンの再頒布可能パッケージには、最新の機能、セキュリティ更新プログラム、およびバグ修正がすべて含まれていることを確認します。 そのため、常に使用可能な最新バージョンにアップグレードすることをお勧めします。

同様に、新しいバージョンが既にインストールされている場合は、古い再頒布可能パッケージをインストールすることはできません。 実行しようとすると、インストーラーによってエラーが報告されます。 既に2022バージョンを搭載しているコンピューターに2017または2019再頒布可能パッケージをインストールすると、次のようなエラーが表示されます。

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.

このエラーは仕様によるものです。 最新バージョンをインストールしておくことをお勧めします。 インストーラーがこのエラーから自動的に回復できることを確認します。

重要

Windows XP のランタイムライブラリのサポートは、最新の Visual Studio の Visual C++ 再頒布可能パッケージでは使用できなくなりました。 Windows XP をサポートするための最新の再頒布可能パッケージは、バージョン 16.7 (ファイルバージョン 14.27.29114.0) です。 ご利用の Windows XP アプリが最新バージョンの再頒布可能パッケージを使用して配置されているか、そのバージョンに更新されている場合、アプリは実行されません。 詳細および Windows xp をサポートする再頒布可能パッケージのバージョンを取得する方法については、「 Windows xp 用プログラムの構成」を参照してください。

関連項目

Visual C++ の変更履歴
サポートされている最新の Visual C++ 再頒布可能パッケージダウンロード