分享方式:


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

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

我們已在 Visual Studio 2015 和更新版本中變更此行為。 任何此編譯器版本所編譯的執行階段程式庫和應用程式皆與二進位相容。 它反映在 C++ 工具組的主要號碼中,針對 Visual Studio 2015 以來的所有版本,號碼開頭皆為 14。 (適用 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 工具組與次要編號版本更新之間,有三個二進位相容性的重要限制:

  • 使用不同版本的 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 與較舊的工具組。
  • 您的應用程式使用的可轉散發套件具有類似的二進位相容性限制。 當您將不同支援版本的工具組所建置的二進位檔混合時,可轉散發套件版本必須至少和任何應用程式元件所使用的最新工具組一樣新版。
  • 使用 /GL (完整程式最佳化) 編譯器參數所編譯的靜態程式庫或物件檔案,或使用 /LTCG (連結時間碼生成集) 連結,並不會跨版本二進位相容 (包括次要版本更新)。 使用 /GL/LTCG 編譯的所有物件檔案和程式庫,都必須使用與編譯和最終連結完全相同的工具組。 例如,在 Visual Studio 2019 16.7 版工具組中使用 /GL 建置的程式碼無法連結到 Visual Studio 2019 16.8 版工具組中使用 /GL 所建置的程式碼。 編譯器會發出嚴重錯誤 C1047

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

我們已針對 Visual Studio 2015、2017、2019 和 2022,維持相同的 Microsoft Visual C++ 可轉散發套件主要版本號碼。 這表示一次只能安裝一個可轉散發套件的執行個體。 較新版本會覆寫任何已安裝的較舊版本。 例如,一個應用程式可能會從 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 的最新版 Visual C++ 可轉散發套件中,已不再提供 Windows XP 的執行階段程式庫支援。 最後一個支援 Windows XP 的可轉散發套件是 16.7 版 (檔案版本 14.27.29114.0)。 如果您的 Windows XP 應用程式已部署或更新較新版本的可轉散發套件,則應用程式無法執行。 如需詳細資訊,以及取得支援 Windows XP 的可轉散發套件版本,請參閱為 Windows XP 設定程式

另請參閱

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