Uaktualnienie kodu do Universal CRT
Biblioteka microsoft C Runtime Library (CRT) została refaktoryzowana w programie Visual Studio 2015. Standardowa biblioteka C, rozszerzenia POSIX i funkcje specyficzne dla firmy Microsoft, makra i zmienne globalne zostały przeniesione do nowej biblioteki, uniwersalnej biblioteki środowiska uruchomieniowego języka C (universal CRT lub UCRT). Składniki specyficzne dla kompilatora CRT zostały przeniesione do nowej biblioteki vcruntime.
UCRT jest teraz składnikiem systemu Windows i jest dostarczany w ramach systemu Windows 10 i nowszych. Funkcja UCRT obsługuje stabilną ABI opartą na konwencjach wywoływania języka C i jest ściśle zgodna ze standardem ISO C99, z zaledwie kilkoma wyjątkami. Nie jest już powiązany z określoną wersją kompilatora. Możesz użyć narzędzia UCRT w dowolnej wersji systemu Windows obsługiwanej przez program Visual Studio 2015 lub Visual Studio 2017. Zaletą jest to, że nie trzeba już aktualizować kompilacji w celu kierowania nowej wersji CRT przy każdym uaktualnieniu programu Visual Studio.
Ta refaktoryzacja zmieniła nazwy lub lokalizacje wielu plików nagłówkowych CRT, plików biblioteki i plików redystrybucyjnych oraz metody wdrażania wymagane dla kodu. Dodano również wiele funkcji i makr w narzędziu UCRT lub zmieniono je, aby poprawić zgodność ze standardami. Aby skorzystać z tych zmian, należy zaktualizować istniejący kod i systemy kompilacji projektu.
Gdzie można znaleźć pliki universal CRT
Jako składnik systemu Windows pliki i nagłówki bibliotekI UCRT są teraz częścią zestawu Sdk (Software Development Kit). Podczas instalowania programu Visual Studio instalowane są również części zestawu Windows SDK wymagane do korzystania z narzędzia UCRT. Instalator programu Visual Studio dodaje lokalizacje nagłówków, bibliotek i plików DLL UCRT do domyślnych ścieżek używanych przez system kompilacji projektu programu Visual Studio. Podczas aktualizowania projektów programu Visual Studio C++ jeśli używają domyślnych ustawień projektu, środowisko IDE automatycznie znajdzie nowe lokalizacje dla plików nagłówków. Konsolidator automatycznie używa nowych domyślnych bibliotek UCRT i vcruntime. Podobnie, jeśli do kompilowania wiersza polecenia jest używany wiersz polecenia dla deweloperów, zmienne środowiskowe zawierające ścieżki nagłówków i bibliotek są aktualizowane i działają automatycznie.
Standardowe pliki nagłówkowe biblioteki C znajdują się teraz w zestawie Windows SDK w folderze include w katalogu specyficznym dla wersji zestawu SDK. Typową lokalizacją plików nagłówkowych jest katalog Program Files lub Program Files (x86) w obszarze Windows Kits\10\Include\[sdk-version]\ucrt
, gdzie [sdk-version]
odpowiada wersji systemu Windows lub aktualizacji, na przykład 10.0.14393.0 dla rocznicowej aktualizacji systemu Windows 10.
Biblioteki statyczne UCRT i biblioteki wycinków łącza dynamicznego znajdują się w katalogu Program Files lub Program Files (x86) w lokalizacji Windows Kits\10\Lib\[sdk-version]\ucrt\[architecture]
, gdzie architecture
to ARM64, x86 lub X64. Biblioteki statyczne handlu detalicznego i debugowania to libucrt.lib
i libucrtd.lib
, a biblioteki bibliotek dll UCRT to ucrt.lib
i ucrtd.lib
.
Biblioteki DLL UCRT dla handlu detalicznego i debugowania znajdują się w oddzielnych lokalizacjach. Detaliczne biblioteki DLL są plikami redystrybucyjnymi i można je znaleźć w katalogu Program Files lub Program Files (x86) w obszarze Windows Kits\10\Redist\ucrt\DLLs\[architecture]\
. Biblioteki UCRT debugowania nie są plikami redystrybucyjnymi i można je znaleźć w katalogu Program Files lub Program Files (x86) w Windows Kits\10\bin\[architecture]\ucrt
folderze.
Gdzie znaleźć standardowe biblioteki i nagłówki
Biblioteka vcruntime
obsługi środowiska uruchomieniowego specyficznego dla kompilatora języka C i C++ zawiera kod wymagany do obsługi uruchamiania programu i funkcji, takich jak obsługa wyjątków i funkcje wewnętrzne. Biblioteka i jego pliki nagłówkowe są nadal znajdowane w folderze programu Microsoft Visual Studio specyficznym dla wersji w katalogu Program Files lub Program Files (x86).
W programie Visual Studio 2017, 2019 i 2022 pliki nagłówkowe znajdują się w obszarze Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\include
. [year]
W tym miejscu jest wersja programu Visual Studio, [edition]
jest wersją lub pseudonimem programu Visual Studio i [lib-version]
jest wersją kompilacji bibliotek.
Biblioteki linków znajdują się w obszarze Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\lib\[architecture]
, gdzie [year]
jest wersją programu Visual Studio, [edition]
jest wersją lub pseudonimem programu Visual Studio, [lib-version]
jest wersją kompilacji bibliotek i [architecture]
jest architekturą procesora docelowego. Biblioteki linków dla aplikacji OneCore i Store znajdują się również w folderze bibliotek.
Wersje biblioteki libvcruntime.lib
statycznej to i libvcruntimed.lib
. Biblioteki łączników dynamicznych handlu detalicznego i debugowania są vcruntime.lib
odpowiednio i vcruntimed.lib
.
Po zaktualizowaniu projektów programu Visual Studio C++ właściwość Konsolidator projektu ignoruj wszystkie biblioteki domyślne na Tak lub jeśli używasz /NODEFAULTLIB
opcji konsolidatora w wierszu polecenia, musisz zaktualizować listę bibliotek, aby uwzględnić nowe, refaktoryzowane biblioteki. Zastąp starą bibliotekę CRT, na przykład libcmt.lib
, libcmtd.lib
, msvcrt.lib
lub msvcrtd.lib
, równoważną refaktoryzowaną biblioteką. Aby uzyskać informacje na temat określonych bibliotek do użycia, zobacz Funkcje biblioteki CRT.
Wdrażanie i redystrybucja uniwersalnego CRT
Ponieważ UCRT jest teraz składnikiem systemu operacyjnego Microsoft Windows, jest on dołączony do systemu operacyjnego w systemie Windows 10 i nowszych. Jest ona dostępna za pośrednictwem usługi Windows Update dla starszych systemów operacyjnych, Windows Vista za pośrednictwem systemu Windows 8.1. Wersja pakietu redystrybucyjnego jest dostępna dla systemu Windows XP. Jako składnik systemu operacyjnego aktualizacje I obsługa UCRT są zarządzane przez usługę Windows Update niezależnie od wersji programu Visual Studio i kompilatora Microsoft C++. Ponieważ UCRT jest składnikiem systemu Windows, w celu zapewnienia bezpieczeństwa i łatwości aktualizacji oraz mniejszego rozmiaru obrazu, zdecydowanie zalecamy użycie pakietu redystrybucyjnego do centralnego wdrożenia narzędzia UCRT dla aplikacji.
Możesz użyć narzędzia UCRT w dowolnej wersji systemu Windows obsługiwanej przez program Visual Studio 2015 lub nowszy. Można go ponownie rozpowszechnić przy użyciu vcredist
pakietu dla obsługiwanych wersji systemu Windows przed systemem Windows 10. Pakiety vcredist
obejmują składniki UCRT i automatycznie instalują je w systemach operacyjnych Windows, które nie mają zainstalowanych domyślnie. Aby uzyskać więcej informacji, zobacz Redystrybucja plików Visual C++.
Wdrożenie lokalne aplikacji UCRT jest obsługiwane, choć nie jest zalecane zarówno ze względów wydajności, jak i zabezpieczeń. Biblioteki DLL dla lokalnego wdrożenia UCRT są uwzględniane w ramach zestawu Windows SDK w podkatalogu redist
. Wymagane biblioteki DLL obejmują ucrtbase.dll
zestaw bibliotek DLL usługi przesyłania dalej APISet o nazwie api-ms-win-[subset].dll
. Zestaw bibliotek DLL wymaganych w każdym systemie operacyjnym różni się, dlatego zalecamy uwzględnienie wszystkich bibliotek DLL podczas korzystania z wdrożenia lokalnego aplikacji. Aby uzyskać więcej informacji i rekomendacji dotyczących wdrażania lokalnego aplikacji, zobacz Wdrażanie w języku Visual C++.
Zmiany w funkcjach i makrach uniwersalnych CRT
Wiele funkcji zostało dodanych lub zaktualizowanych w narzędziu UCRT, aby poprawić zgodność iso C99 oraz rozwiązać problemy z jakością kodu i zabezpieczeniami. W niektórych przypadkach wymaga to zmian powodujących niezgodność w bibliotece. Kod, który został skompilowany w sposób czysty podczas korzystania ze starszej wersji CRT, może ulec awarii podczas kompilowania go przy użyciu narzędzia UCRT. Jeśli tak, musisz zmienić kod, aby korzystać z aktualizacji i funkcji UCRT. Aby uzyskać szczegółową listę zmian powodujących niezgodność i aktualizacje CRT znalezione w uniwersalnym CRT, zobacz sekcję C Runtime Library (CRT) historii zmian języka Visual C++. Zawiera listę nagłówków i funkcji, których dotyczy problem, za pomocą których można zidentyfikować zmiany wymagane w kodzie.
Zobacz też
Przewodnik przenoszenia i uaktualniania języka Visual C++
Omówienie potencjalnych problemów z uaktualnieniem (Visual C++)
Uaktualnianie projektów z wcześniejszych wersji programu Visual C++
Visual C++ — historia zmian w latach 2003–2015
Ulepszenia zgodności języka C++ w programie Visual Studio