Binärkompatibilität von C++ zwischen Visual Studio-Versionen

Die Compilertools von Microsoft C++ (MSVC) in Visual Studio 2013 und früheren Versionen garantieren keine binäre Kompatibilität in Hauptversionen. Sie können keine Objektdateien, statischen Bibliotheken, dynamischen Bibliotheken und ausführbaren Dateien verknüpfen, die von verschiedenen Versionen dieser Toolsets erstellt wurden. Die ABIs, Objektformate und Laufzeitbibliotheken sind inkompatibel.

Wir haben dieses Verhalten in Visual Studio 2015 und höheren Versionen geändert. Die laufzeitbibliotheken und apps, die von einer dieser Versionen des Compilers kompiliert werden, sind binärkompatibel. Sie spiegelt sich in der Hauptnummer des C++-Toolsets wider, die mit 14 für alle Versionen seit Visual Studio 2015 beginnt. (Die Toolsetversion ist v140 für Visual Studio 2015, v141 für 2017, v142 für 2019 und v143 für 2022). Angenommen, Sie haben Bibliotheken von Drittanbietern, die von Visual Studio 2015 erstellt wurden. Sie können sie weiterhin in einer Anwendung verwenden, die von Visual Studio 2017, 2019 oder 2022 erstellt wurde. Es ist nicht erforderlich, ein passendes Toolset neu zu kompilieren. Die neueste Version des Microsoft Visual C++-Redistributable-Pakets (redistributable) funktioniert für alle.

Einschränkungen bei binärer Kompatibilität

Es gibt drei wichtige Einschränkungen für die binäre Kompatibilität zwischen den Versionsupdates v140, v141, v142 und v143:

  • Binärdateien, die mit verschiedenen Versionen der Toolsets v140, v141, v142 und v143 erstellt wurden, können kombiniert werden. Die Schlüsselregel ist, dass der Linker nur mit Eingaben arbeiten sollte, die von einem Toolset erstellt wurden, das dieselbe Version (oder früher) wie selbst ist. Dies gilt für Apps, Importbibliotheken, statische Bibliotheken und andere Dateien, wie in LINK-Eingabedateien beschrieben. In einigen Fällen kann eine Importbibliothek für eine implizit verknüpfte DLL, die von einer späteren Version des Toolsets erstellt wurde, mithilfe einer früheren Version des Toolset verknüpft werden, insbesondere, wenn die Importbibliothek streng für die Importe/Exporte verwendet extern "C" wird. Hier sind einige Beispiele dafür, was dies alles bedeutet:
    • Eine app, die mit einem Toolset von 2017 (v141, Version 15.0 bis 15.9) kompiliert wurde, kann mit einer statischen Bibliothek verknüpft werden, die mit Visual Studio 2022, Version 17.8 (v143), kompiliert wurde, aber die Verknüpfung muss mit einem Toolset der Version 17.8 oder höher erfolgen.
    • Apps und Bibliotheken, die mit VS 2015, 2017, 2019 oder 2022 erstellt wurden, können miteinander verknüpft werden, aber die Verknüpfung muss mit einer Version des Toolsets erfolgen, die so aktuell ist wie, oder aktueller als, das neueste Toolset zum Erstellen einer der Binärdateien, die Sie an den Linker übergeben. Bei drei Binärdateien, die mit Toolsets aus VS 2015, Version 14.3, VS 2017, Version 15.9 und VS 2019, Version 16.11, erstellt wurden, können Sie sie mit jeder Toolsetversion verknüpfen, die 16.11 oder höher ist.
    • Wenn eine DLL mit einem neueren Toolset erstellt wird, kann die Importbibliothek manchmal mit älteren Toolsets verwendet werden, wenn alle Exporte der C-Sprachaufrufkonvention folgen (extern "C"). Der einzige offiziell unterstützte Fall verwendet jedoch ein neueres Windows SDK mit einem älteren Toolset.
  • Die weitervertreibbare App weist eine ähnliche Binärkompatibilitätseinschränkung auf. Wenn Sie Binärdateien kombinieren, die von verschiedenen unterstützten Versionen des Toolsets erstellt wurden, muss die Redistributable-Version mindestens so neu sein wie das neueste Toolset, das von jeder App-Komponente verwendet wird.
  • Statische Bibliotheken oder Objektdateien, die mithilfe des /GL Compiler-Switchs (Wer le Programmoptimierung) kompiliert wurden, oder verknüpft mit/LTCG(Linkzeitcodegenerierung) sind nicht binärkompatibel in allen Versionen, einschließlich Nebenversionsupdates. Alle Objektdateien und Bibliotheken, die mit /GL kompiliert wurden, und /LTCG müssen genau dasselbe Toolset für die Kompilierung und den endgültigen Link verwenden. Code, der in Visual Studio 2019, Version 16.7-Toolset, erstellt /GL wurde, kann beispielsweise nicht mit Code verknüpft werden, der mithilfe /GL des Toolsets von Visual Studio 2019, Version 16.8, erstellt wurde. Der Compiler gibt den schwerwiegenden Fehler C1047 aus.

Aktualisieren der Redistributable von Microsoft Visual C++ von Visual Studio 2015 und höher

Wir haben die Hauptversionsnummer von Microsoft Visual C++ redistributable für Visual Studio 2015, 2017, 2019 und 2022 beibehalten. Das bedeutet, dass jeweils nur eine Instanz der Redistributable installiert werden kann. Eine neuere Version überschreibt alle älteren Versionen, die bereits installiert sind. Beispielsweise kann eine App die Redistributable aus Visual Studio 2015 installieren. Anschließend installiert eine andere App die Redistributable aus Visual Studio 2022. Die Version 2022 überschreibt die ältere Version, aber da sie binärkompatibel sind, funktioniert die frühere App weiterhin einwandfrei. Wir stellen sicher, dass die neueste Version der Redistributable alle neuesten Features, Sicherheitsupdates und Fehlerbehebungen enthält. Deshalb empfehlen wir Ihnen immer ein Upgrade auf die neueste verfügbare Version.

Ebenso können Sie eine ältere Redistributable nicht installieren, wenn bereits eine neuere Version installiert ist. Wenn Sie versuchen, meldet das Installationsprogramm einen Fehler. Wenn Sie die Redistributable 2017 oder 2019 auf einem Computer installieren, auf dem bereits die Version 2022 installiert ist, wird ein Fehler wie folgt angezeigt:

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.

Dieser Fehler ist beabsichtigt. Es wird empfohlen, die neueste Version zu installieren. Stellen Sie sicher, dass das Installationsprogramm diesen Fehler im Hintergrund wiederherstellen kann.

Wichtig

Die Unterstützung der Laufzeitbibliothek für Windows XP ist in den neuesten Visual C++ Redistributable für Visual Studio nicht mehr verfügbar. Die letzte Weiterverteilbar zur Unterstützung von Windows XP ist Version 16.7 (Dateiversion 14.27.29114.0). Wenn Ihre Windows XP-Apps mit einer späteren Version des Redistributable bereitgestellt oder auf eine solche aktualisiert werden, werden die Apps nicht ausgeführt. Weitere Informationen und informationen zum Abrufen einer Version der weiterverteilbaren Version, die Windows XP unterstützt, finden Sie unter Konfigurieren von Programmen für Windows XP.

Weitere Informationen

Änderungsverlauf von Visual C++
Die neuesten unterstützten Downloads für Visual C++ Redistributable