Upgraden Ihres Codes auf die Universal CRT
Die Microsoft C-Runtime-Bibliothek (CRT) wurde in Visual Studio 2015 umgestaltet. Die C-Standardbibliothek, POSIX-Erweiterungen und Microsoft-spezifische Funktionen, Makros sowie globale Variablen wurden in eine neue Bibliothek verschoben, die universelle C-Laufzeitbibliothek (universelle CRT oder UCRT). Die compilerspezifischen Komponenten der CRT wurden in eine neue vcruntime-Bibliothek verschoben.
Die UCRT ist jetzt eine Windows-Komponente und wird als Teil von Windows 10 und höher ausgeliefert. Die UCRT unterstützt eine stabile ABI, die auf C-Aufrufkonvention basiert und den Standard ISO C99 (mit nur wenigen Ausnahmen) erfüllt. Sie ist nicht mehr an eine bestimmte Version des Compilers gebunden. Sie können die UCRT unter jeder Version von Windows verwenden, die von Visual Studio 2015 oder Visual Studio 2017 unterstützt wird. Der Vorteil ist, dass Sie nicht länger Ihre Builds aktualisieren müssen, um auf eine Version der CRT mit jedem Visual Studio-Upgrade abzuzielen.
Diese Umgestaltung hat die Namen oder Speicherorte vieler CRT-Headerdateien, Bibliotheksdateien und Redistributable-Dateien sowie die bereitstellungsmethoden geändert, die für Ihren Code erforderlich sind. Viele Funktionen und Makros im UCRT wurden ebenfalls hinzugefügt oder geändert, um die Standardskonformität zu verbessern. Um diese Änderungen nutzen zu können, müssen Sie Ihre vorhandenen Code- und Projektbuildsysteme aktualisieren.
Wo die universellen CRT-Dateien zu finden sind
Als Windows-Komponente sind die UCRT-Bibliotheksdateien und -header nun Teil des Windows Software Development Kit (SDK). Wenn Sie Visual Studio installieren, werden Teile des Windows SDK auch installiert, die zur Verwendung der UCRT erforderlich sind. Der Visual Studio-Installer fügt die Speicherorte der UCRT-Header, -Bibliotheken und -DLL-Dateien zu den Standardpfaden hinzu, die vom Projekterstellungssystem von Visual Studio verwendet werden. Wenn Sie Ihre Visual Studio C++-Projekte aktualisieren, findet die IDE automatisch die neuen Speicherorte für Headerdateien, wenn sie die Standardprojekteinstellungen verwenden. Und der Linker verwendet automatisch die neuen STANDARD-UCRT- und vcruntime-Bibliotheken. Ebenso werden die Umgebungsvariablen, die Pfade für Header und Bibliotheken enthalten, aktualisiert und arbeiten auch automatisch, wenn Sie die Developer-Eingabeaufforderung verwenden, um die Funktion „Erstellen über die Befehlszeile“ zu nutzen.
Die Headerdateien der C-Standardbibliothek befinden sich nun im Windows SDK in einem Includeordner in einem der Version des SDK spezifischen Verzeichnis. Ein typischer Speicherort für die Headerdateien befindet sich im Verzeichnis "Programme" oder "Programme" (x86) unter Windows Kits\10\Include\[sdk-version]\ucrt
, wobei [sdk-version]
eine Windows-Version oder ein Update entspricht, z. B. 10.0.14393.0 für das Anniversary Update von Windows 10.
Die statischen UCRT-Bibliotheken und Stubbibliotheken für dynamische Verknüpfungen befinden sich im Verzeichnis "Programme" oder "Programme" (x86) unter Windows Kits\10\Lib\[sdk-version]\ucrt\[architecture]
" architecture
ARM64", "x86" oder "X64". Die Einzelhandels- und Debug-statischen Bibliotheken sind libucrt.lib
und sind und libucrtd.lib
die Bibliotheken für die UCRT-DLLs und ucrt.lib
ucrtd.lib
.
Die eigentlichen UCRT-DLLs und diejenigen zum Debuggen befinden sich an anderen Speicherorten. Die Einzelhandels-DLLs sind redistributable files, and can be found in the Program Files or Program Files (x86) directory under Windows Kits\10\Redist\ucrt\DLLs\[architecture]\
. Debug UCRT-Bibliotheken sind keine weiterverteilbaren Dateien und finden Sie im Verzeichnis "Programme " oder "Programme( x86) " unter Windows Kits\10\bin\[architecture]\ucrt
"Ordner".
Wo finden Sie die Standardbibliotheken und Kopfzeilen
Die C- und C++-compilerspezifische Laufzeitunterstützungsbibliothek enthält den Code, vcruntime
der zum Unterstützen des Programmstarts und von Features wie Ausnahmebehandlung und systeminternen Funktionen erforderlich ist. Die Bibliothek und die zugehörigen Headerdateien befinden sich weiterhin im versionsspezifischen Microsoft Visual Studio-Ordner in Ihrem Verzeichnis "Programme" oder "Programme" (x86 ).
In Visual Studio 2017, 2019 und 2022 befinden sich die Headerdateien unter Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\include
. [year]
Hier ist die Version von Visual Studio, [edition]
die Edition oder der Spitzname für Visual Studio und [lib-version]
die Buildversion der Bibliotheken.
Die Linkbibliotheken finden Sie unter Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\lib\[architecture]
, wobei [year]
es sich um die Version von Visual Studio handelt, [edition]
um die Edition oder den Spitznamen für Visual Studio, [lib-version]
ist die Buildversion der Bibliotheken und [architecture]
die Zielprozessorarchitektur. Link Libraries für OneCore und Store sind auch im Bibliotheksordner vorhanden.
Die Einzelhandels- und Debugversionen der statischen Bibliothek sind libvcruntime.lib
und libvcruntimed.lib
. Die Stubbibliotheken für dynamische Verknüpfungen und Debug-Stubbibliotheken sind vcruntime.lib
bzw vcruntimed.lib
.
Wenn Sie Ihre Visual Studio C++-Projekte aktualisieren, wenn Sie die Linker-Eigenschaft des Projekts "Alle Standardbibliotheken ignorieren" auf "Ja" festgelegt haben oder wenn Sie die /NODEFAULTLIB
Linkeroption in der Befehlszeile verwenden, müssen Sie die Liste der Bibliotheken aktualisieren, um die neuen, umgestalteten Bibliotheken einzuschließen. Ersetzen Sie die alte CRT-Bibliothek, z. B. libcmt.lib
, libcmtd.lib
, , oder msvcrt.lib
msvcrtd.lib
, durch die entsprechenden umgestalteten Bibliotheken. Informationen zu den zu verwendenden Bibliotheken finden Sie unter CRT-Bibliotheksfeatures.
Bereitstellung und Neuverteilung der Universal CRT
Da die UCRT jetzt eine Microsoft Windows-Betriebssystemkomponente ist, ist sie bestandteil des Betriebssystems in Windows 10 und höher. Es ist über Windows Update für ältere Betriebssysteme, Windows Vista bis Windows 8.1 verfügbar. Eine redistributable-Version ist für Windows XP verfügbar. Als Komponente des Betriebssystems werden UCRT-Updates und die UCRT-Wartung von Windows Update unabhängig von Visual Studio und Microsoft C++-Compilerversionen verwaltet. Da es sich bei der UCRT um eine Windows-Komponente handelt, um Die Sicherheit und die Einfachheit von Updates und eine kleinere Bildgröße zu erleichtern, empfehlen wir dringend, dass Sie das Redistributable-Paket verwenden, um die zentrale Bereitstellung des UCRT für Ihre App durchzuführen.
Sie können die UCRT auf einer beliebigen Version von Windows verwenden, die von Visual Studio 2015 oder höher unterstützt wird. Sie können es mithilfe eines vcredist
Pakets für unterstützte Versionen von Windows vor Windows 10 weiterverteilen. Die vcredist
Pakete enthalten die UCRT-Komponenten und installieren sie automatisch auf Windows-Betriebssystemen, auf denen sie nicht standardmäßig installiert sind. Weitere Informationen finden Sie unter Verteilen von Visual C++-Dateien.
Eine lokale Bereitstellung der App der UCRT wird zwar unterstützt, wird jedoch aus Leistungs- und Sicherheitsgründen nicht empfohlen. Die DLLs für die app-lokale Bereitstellung des UCRT sind im Unterverzeichnis des Windows SDK redist
enthalten. Die erforderlichen DLLs enthalten ucrtbase.dll
und eine Reihe von APISet-Weiterleitungs-DLLs mit dem Namen api-ms-win-[subset].dll
. Die Reihe der erforderlichen DLLs auf jedem Betriebssystem variiert, deshalb empfiehlt es sich, dass Sie alle DLLs einschließen, wenn Sie die lokale Bereitstellung der App verwenden. Weitere Informationen und Empfehlungen zur app-lokalen Bereitstellung finden Sie unter Bereitstellung in Visual C++.
Änderungen an den Universal CRT-Funktionen und -Makros
Viele Funktionen wurden in der UCRT hinzugefügt oder aktualisiert, um die ISO C99-Konformität zu verbessern und Probleme mit der Codequalität und Sicherheit zu beheben. In einigen Fällen erfordert dies beeinträchtigende Änderungen an der Bibliothek. Ihr Code, der sauber kompiliert wurde, wenn eine ältere Version des CRT verwendet wird, kann beim Kompilieren mit dem UCRT nicht mehr ausgeführt werden. Wenn ja, müssen Sie Ihren Code ändern, um UCRT-Updates und -Features nutzen zu können. Eine ausführliche Liste aller wichtigen Änderungen und Updates für die CRT, die in der Universal CRT ermittelt wurden, finden Sie im Abschnitt C Runtime Library (CRT) (C-Laufzeitbibliothek (CRT)) des Änderungsverlaufs von Visual C++. Sie enthält die betroffenen Header und Funktionen, die Sie zur Identifizierung der Änderungen verwenden können, die in Ihrem Code erforderlich sind.
Siehe auch
Visual C++-Handbuch: Portieren und Aktualisieren
Überblick über potenzielle Aktualisierungsprobleme (Visual C++)
Aktualisieren von Projekten aus früheren Versionen von Visual C++
Änderungsverlauf von Visual C++ von 2003 bis 2015
Verbesserungen der C++-Konformität in Visual Studio 2015