Visual Studio 版本之間的 C++ 二進制相容性

Visual Studio 2013 和更早版本中的 Microsoft C++ (MSVC) 編譯程式工具組不保證主要版本的二進位相容性。 您無法連結物件檔案、靜態庫、動態連結庫,以及由不同版本的這些工具集所建置的可執行檔。 ABIS、物件格式和運行時間連結庫不相容。

我們已在 Visual Studio 2015 和更新版本中變更此行為。 這些編譯程式版本所編譯的運行時間連結庫和應用程式與二進位相容。 它反映在 C++ 工具組主要數位中,從 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 所建置的應用程式中使用它們。 不需要重新編譯相符的工具組。 最新版的 Microsoft C++ 可轉散發套件 套件 (可轉散發套件) 適用於所有套件。

二進位相容性的限制

v140、v141、v142 和 v143 工具組和次要編號版本更新之間有三個重要限制:

  • 您可以使用不同版本的 v140、v141、v142 和 v143 工具組來建立的二進位檔。 關鍵規則是連結器只應該使用工具組所建置的輸入,其版本與本身相同(或更早版本)。 這適用於應用程式、匯入連結庫、靜態庫和其他檔案,如 LINK 輸入檔中所述。 在某些情況下,新版工具組所建置之隱含連結 DLL 的匯入連結庫可以使用舊版工具組連結,特別是如果匯入連結庫嚴格使用extern "C"匯入/導出時。 以下是這一切所代表的一些範例:
    • 使用 2017 工具組編譯的應用程式(v141 15.0 至 15.9 版)可以連結至使用 Visual Studio 2022 17.8 版(v143)編譯的靜態庫,但鏈接必須使用 17.8 版或更新版本工具組來完成連結。
    • 使用 VS 2015、2017、2019 或 2022 建置的應用程式和連結庫可以連結在一起,但鏈接必須使用最近的工具組版本來完成,或比您傳遞至連結器的任何二進位檔所使用的最新工具組。 例如,假設有三個二進位檔使用 VS 2015 14.3 版、VS 2017 15.9 版和 VS 2019 16.11 版的工具組所建置,您可以使用 16.11 版或更新版本的任何工具組版本鏈接它們。
    • 如果使用較新的工具組建置 DLL,如果所有匯出都遵循 C 語言呼叫慣例 (extern "C"), 匯入連結庫有時會與較舊的工具組搭配使用。 不過,唯一正式支援的案例是使用較新的 Windows SDK 與較舊的工具組。
  • 您的應用程式使用的可轉散發套件具有類似的二進位相容性限制。 當您混合工具組不同支援版本所建置的二進位檔時,可轉散發套件版本至少必須和任何應用程式元件所使用的最新工具組一樣新。
  • 使用 (神秘 le 程式優化) 編譯程式參數編譯或連結/LTCG的靜態庫或物件檔案,在版本之間無法與二進位相容,包括次要版本更新。/GL 所有使用 /GL 編譯的物件檔案和連結庫,都必須 /LTCG 針對編譯和最終連結使用完全相同的工具組。 例如,使用 /GL Visual Studio 2019 16.7版工具組所建置的程式碼無法連結至使用 /GL Visual Studio 2019 16.8版工具組所建置的程式代碼。 編譯程式會 發出嚴重錯誤 C1047

從 Visual Studio 2015 和更新版本升級 Microsoft C++ 可轉散發套件

我們已讓 Microsoft C++ 可轉散發套件 Visual Studio 2015、2017、2019 和 2022 的主要版本號碼相同。 這表示一次只能安裝一個可轉散發套件實例。 較新版本會覆寫任何已安裝的較舊版本。 例如,一個應用程式可能會從 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.

此錯誤是設計方式。 建議您保持最新版的安裝。 請確定您的安裝程式可以無訊息地從此錯誤中復原。

重要

Visual Studio 的最新 C++ 可轉散發套件 已不再提供 Windows XP 的運行時間連結庫支援。 支援 Windows XP 的最後一個可轉散發套件是 16.7 版(檔案版本 14.27.29114.0)。 如果您的 Windows XP 應用程式已使用 或更新為更新為可轉散發套件的更新版本,則不會執行應用程式。 如需詳細資訊,以及如何取得支援 Windows XP 的可轉散發套件版本,請參閱 設定 Windows XP 的程式。

另請參閱

Visual C++ 變更歷程記錄
最新支援的下載 C++ 可轉散發套件