Upgrade kódu na Universal CRT

Knihovna CRT (Microsoft C Runtime Library) byla refaktorována v sadě Visual Studio 2015. Standardní knihovna C, rozšíření POSIX a funkce specifické pro Microsoft, makra a globální proměnné byly přesunuty do nové knihovny, universal C Runtime Library (Universal CRT nebo UCRT). Komponenty CRT specifické pro kompilátor byly přesunuty do nové knihovny vcruntime.

UCRT je teď součástí Windows a dodává se jako součást Windows 10 a novější. UCRT podporuje stabilní ABI na základě konvencí volání jazyka C a je v souladu se standardem ISO C99, pouze s několika výjimkami. Už není svázaný s konkrétní verzí kompilátoru. UcRT můžete použít v libovolné verzi Windows podporované sadou Visual Studio 2015 nebo Visual Studio 2017. Výhodou je, že už nemusíte aktualizovat buildy tak, aby cílily na novou verzi CRT při každém upgradu sady Visual Studio.

Tento refaktoring změnil názvy nebo umístění mnoha souborů hlaviček CRT, souborů knihovny a redistribuovatelných souborů a metod nasazení požadovaných pro váš kód. Mnoho funkcí a maker v UCRT bylo také přidáno nebo změněno, aby se zlepšila shoda se standardy. Pokud chcete tyto změny využít, musíte aktualizovat stávající kód a systémy sestavení projektu.

Kde najít univerzální soubory CRT

Soubory a hlavičky knihovny UCRT jsou teď součástí sady Windows SDK (Software Development Kit). Při instalaci sady Visual Studio se nainstalují také části sady Windows SDK potřebné k použití UCRT. Instalační program sady Visual Studio přidá umístění hlaviček UCRT, knihoven a souborů DLL do výchozích cest používaných systémem sestavení projektu sady Visual Studio. Když aktualizujete projekty visual Studio C++, pokud používají výchozí nastavení projektu, integrované vývojové prostředí automaticky najde nová umístění pro soubory hlaviček. A linker automaticky používá nové výchozí knihovny UCRT a vcruntime. Podobně pokud k sestavení příkazového řádku pro vývojáře použijete příkazový řádek, aktualizují se proměnné prostředí obsahující cesty pro hlavičky a knihovny a fungují automaticky.

Soubory hlaviček standardní knihovny C se teď nacházejí v sadě Windows SDK ve složce include v adresáři specifickém pro verzi sady SDK. Typické umístění pro soubory hlaviček je v adresáři Program Files nebo Program Files (x86) v části Windows Kits\10\Include\[sdk-version]\ucrt, kde [sdk-version] odpovídá verzi systému Windows nebo aktualizaci, například 10.0.14393.0 pro Anniversary Update systému Windows 10.

Statické knihovny UCRT a dynamické knihovny zástupných procedur odkazů najdete v adresáři Program Files nebo Program Files (x86) v adresáři Windows Kits\10\Lib\[sdk-version]\ucrt\[architecture], kde architecture je ARM64, x86 nebo X64. Maloobchodní a ladicí statické knihovny jsou libucrt.lib a libucrtd.libknihovny pro knihovny knihoven DLL UCRT jsou ucrt.lib a ucrtd.lib.

Maloobchodní a ladicí knihovny DLL UCRT najdete v samostatných umístěních. Maloobchodní knihovny DLL jsou distribuovatelné soubory a lze je najít v adresáři Program Files nebo Program Files (x86) v části Windows Kits\10\Redist\ucrt\DLLs\[architecture]\. Ladicí knihovny UCRT nejsou distribuovatelné soubory a najdete je v adresáři Program Files nebo Program Files (x86) ve Windows Kits\10\bin\[architecture]\ucrt složce.

Kde najít standardní knihovny a hlavičky

Knihovna podpory modulu runtime specifické pro jazyk C a C++ obsahuje kód potřebný k podpoře spouštění programů a funkcí, vcruntimejako je zpracování výjimek a vnitřní prvky. Knihovna a její soubory hlaviček se stále nacházejí ve složce microsoft Visual Studio specifické pro verzi ve vašem adresáři Program Files nebo Program files (x86).

V sadě Visual Studio 2017, 2019 a 2022 jsou soubory hlaviček nalezeny v části Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\include. [year] Tady je verze sady Visual Studio, [edition] je edice nebo přezdívka pro Visual Studio a [lib-version] je to verze sestavení knihoven.

Knihovny odkazů najdete v části Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\lib\[architecture], kde [year] je verze sady Visual Studio, [edition] je edice nebo přezdívka pro Visual Studio, [lib-version] je verze sestavení knihoven a [architecture] je cílovou architekturou procesoru. Knihovny odkazů pro OneCore a Store najdete také ve složce knihoven.

Prodejní a ladicí verze statické knihovny jsou libvcruntime.lib a libvcruntimed.lib. Dynamické knihovny dynamického propojení maloobchodního prodeje a ladění zástupných procedur jsou vcruntime.lib a vcruntimed.libv uvedeném pořadí.

Když aktualizujete projekty visual Studio C++, pokud jste nastavili vlastnost Linker projektu Ignorovat všechny výchozí knihovny na Ano nebo pokud používáte /NODEFAULTLIB možnost linkeru na příkazovém řádku, musíte aktualizovat seznam knihoven tak, aby zahrnoval nové refaktorované knihovny. Nahraďte starou knihovnu CRT, libcmt.libnapříklad , libcmtd.lib, msvcrt.libnebo msvcrtd.libekvivalentními refaktorovanými knihovnami. Informace o konkrétních knihovnách, které se mají použít, najdete v tématu Funkce knihovny CRT.

Nasazení a redistribuce univerzálního CRT

Vzhledem k tomu, že UCRT je nyní součástí operačního systému Microsoft Windows, je součástí operačního systému ve Windows 10 a novějším. Je k dispozici prostřednictvím služba Windows Update pro starší operační systémy, Windows Vista až Windows 8.1. Distribuovatelná verze je k dispozici pro systém Windows XP. Jako součást operačního systému se aktualizace a údržba UCRT spravují služba Windows Update nezávisle na verzích kompilátoru Visual Studio a Microsoft C++. Vzhledem k tomu, že UCRT je komponenta Windows, kvůli zabezpečení a snadné aktualizaci a menší velikosti image, důrazně doporučujeme použít distribuovatelný balíček k centrálnímu nasazení UCRT pro vaši aplikaci.

UcRT můžete použít v libovolné verzi Windows podporované sadou Visual Studio 2015 nebo novější. Můžete ho distribuovat pomocí vcredist balíčku pro podporované verze Windows před Windows 10. Balíčky vcredist zahrnují komponenty UCRT a automaticky je nainstalují do operačních systémů Windows, které je ve výchozím nastavení nemají nainstalované. Další informace naleznete v tématu Redistribuce souborů Visual C++.

Místní nasazení UCRT v aplikaci se podporuje, i když se nedoporučuje z důvodů výkonu i zabezpečení. Knihovny DLL pro místní nasazení UCRT v aplikaci jsou součástí sady Windows SDK v podadresáři redist . Požadované knihovny DLL zahrnují ucrtbase.dll a sadu knihoven DLL služby předávání APISet s názvem api-ms-win-[subset].dll. Sada knihoven DLL vyžadovaných v každém operačním systému se liší, proto doporučujeme zahrnout všechny knihovny DLL při použití místního nasazení aplikace. Další informace a doporučení týkající se místního nasazení aplikací najdete v tématu Nasazení v jazyce Visual C++.

Změny univerzálních funkcí a maker CRT

Mnoho funkcí bylo přidáno nebo aktualizováno v UCRT za účelem zlepšení shody ISO C99 a řešení problémů s kvalitou kódu a zabezpečením. V některých případech to vyžadovalo zásadní změny v knihovně. Kód, který se zkompiloval čistě při použití starší verze CRT, může dojít k přerušení při kompilaci pomocí UCRT. Pokud ano, musíte změnit kód, aby využíval aktualizace a funkce UCRT. Podrobný seznam zásadních změn a aktualizací CRT nalezených v Univerzální CRT najdete v části C Runtime Library (CRT) historie změn v jazyce Visual C++. Obsahuje seznam ovlivněných hlaviček a funkcí, které můžete použít k identifikaci změn potřebných v kódu.

Viz také

Průvodce portováním a upgradem visual C++
Přehled potenciálních problémů s upgradem (Visual C++)
Upgrade projektů ze starších verzí jazyka Visual C++
Historie změn Visual C++ 2003–2015
Vylepšení shody C++ se sadou Visual Studio