Aggiornare il codice a Universal CRT

Microsoft C Runtime Library (CRT) è stato sottoposto a refactoring in Visual Studio 2015. La libreria C standard, le estensioni POSIX, le funzioni, le macro e le variabili globali specifiche di Microsoft sono state spostate in una nuova libreria, Universal CRT o UCRT. I componenti specifici del compilatore della libreria CRT sono stati spostati in una nuova libreria vcruntime.

UCRT è ora un componente windows e viene fornito come parte di Windows 10 e versioni successive. La libreria UCRT supporta un'ABI stabile basata sulle convenzioni di chiamata C ed è strettamente conforme allo standard ISO C99, con poche eccezioni. Non è più associato a una versione specifica del compilatore. È possibile usare la libreria UCRT in qualsiasi versione di Windows supportata da Visual Studio 2015 o Visual Studio 2017. Il vantaggio è che non è più necessario aggiornare le compilazioni per usare un nuova versione della libreria CRT con ogni aggiornamento di Visual Studio.

Questo refactoring ha modificato i nomi o i percorsi di molti file di intestazione CRT, file di libreria e file ridistribuibili e i metodi di distribuzione necessari per il codice. Molte funzioni e macro in UCRT sono state aggiunte o modificate per migliorare la conformità degli standard. Per sfruttare questi vantaggi, è necessario aggiornare il codice esistente e i sistemi di compilazione del progetto.

Dove trovare i file della libreria Universal CRT

Come componente di Windows, i file e le intestazioni della libreria UCRT ora fanno parte di Windows Software Development Kit (SDK). Quando si installa Visual Studio, vengono installate anche le parti di Windows SDK richieste per l'uso della libreria UCRT. Il programma di installazione di Visual Studio aggiunge i percorsi di intestazioni UCRT, librerie e file DLL ai percorsi predefiniti usati dal sistema di compilazione del progetto di Visual Studio. Quando si aggiornano i progetti C++ di Visual Studio, se usano le impostazioni predefinite del progetto, l'IDE trova automaticamente i nuovi percorsi per i file di intestazione. Il linker usa automaticamente le nuove librerie UCRT e vcruntime predefinite. Analogamente, se si usa un prompt dei comandi per gli sviluppatori per le compilazioni dalla riga di comando, le variabili di ambiente che contengono i percorsi per intestazioni e librerie vengono aggiornate e funzionano automaticamente.

I file di intestazione della libreria C standard sono ora disponibili in Windows SDK in una cartella di inclusione in una directory specifica della versione dell'SDK. Un percorso tipico per i file di intestazione si trova nella directory Programmi o Programmi (x86) in Windows Kits\10\Include\[sdk-version]\ucrt, dove [sdk-version] corrisponde a una versione o a un aggiornamento di Windows, ad esempio 10.0.14393.0 per l'aggiornamento dell'anniversario di Windows 10.

Le librerie statiche UCRT e le librerie stub di collegamento dinamico si trovano nella directory Programmi o Programmi (x86) in Windows Kits\10\Lib\[sdk-version]\ucrt\[architecture], dove architecture è ARM64, x86 o X64. Le librerie statiche di vendita al dettaglio e di debug sono libucrt.lib e libucrtd.libe le librerie per le DLL UCRT sono ucrt.lib e ucrtd.lib.

Le DLL UCRT di debug e della versione finale si trovano in percorsi separati. Le DLL al dettaglio sono file ridistribuibili e sono disponibili nella directory Programmi o Programmi (x86) in Windows Kits\10\Redist\ucrt\DLLs\[architecture]\. Le librerie UCRT di debug non sono file ridistribuibili e sono disponibili nella directory Programmi o Programmi (x86) nella Windows Kits\10\bin\[architecture]\ucrt cartella .

Dove trovare le librerie e le intestazioni standard

La libreria di supporto del runtime specifico del compilatore C e C++, vcruntime, contiene il codice necessario per supportare l'avvio del programma e le funzionalità, ad esempio la gestione delle eccezioni e gli intrinseci. La libreria e i relativi file di intestazione sono ancora disponibili nella cartella specifica della versione di Microsoft Visual Studio nella directory Programmi o Programmi (x86).

In Visual Studio 2017, 2019 e 2022 i file di intestazione sono disponibili in Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\include. In questo caso, [year] è la versione di Visual Studio, [edition] è l'edizione o il nome alternativo per Visual Studio ed [lib-version] è la versione di compilazione delle librerie.

Le librerie di collegamento sono disponibili in Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\lib\[architecture], dove [year] è la versione di Visual Studio, [edition] è l'edizione o il nome alternativo per Visual Studio, [lib-version] è la versione di compilazione delle librerie ed [architecture] è l'architettura del processore di destinazione. Anche le librerie di collegamento per OneCore e archivio si trovano nella cartella delle librerie.

Le versioni finali e di debug della libreria statica sono libvcruntime.lib e libvcruntimed.lib. Le librerie stub di collegamento dinamico e di debug sono vcruntime.lib rispettivamente e vcruntimed.lib.

Quando si aggiornano i progetti C++ di Visual Studio, se è stata impostata la proprietà Linker del progetto Ignora tutte le librerie predefinite su o se si usa l'opzione /NODEFAULTLIB linker nella riga di comando, è necessario aggiornare l'elenco di librerie per includere le nuove librerie di refactoring. Sostituire la libreria CRT precedente, ad esempio , libcmt.lib, libcmtd.libmsvcrt.libo msvcrtd.lib, con le librerie di refactoring equivalenti. Per informazioni sulle librerie specifiche da usare, vedere Funzionalità della libreria CRT.

Distribuzione e ridistribuzione della libreria Universal CRT

Poiché UCRT è ora un componente del sistema operativo Microsoft Windows, è incluso come parte del sistema operativo in Windows 10 e versioni successive. È disponibile tramite Windows Update per i sistemi operativi precedenti, Windows Vista tramite Windows 8.1. Per Windows XP è disponibile una versione ridistribuibile. Come componente del sistema operativo, gli aggiornamenti e la manutenzione della libreria UCRT vengono gestiti da Windows Update indipendentemente dalle versioni del compilatore di Visual Studio e Microsoft C++. Poiché UCRT è un componente di Windows, per la sicurezza e la facilità degli aggiornamenti e una dimensione più piccola dell'immagine, è consigliabile usare il pacchetto Redistributable per eseguire la distribuzione centrale di UCRT per l'app.

È possibile usare UCRT in qualsiasi versione di Windows supportata da Visual Studio 2015 o versione successiva. Puoi ridistribuirlo usando un vcredist pacchetto per le versioni supportate di Windows prima di Windows 10. I vcredist pacchetti includono i componenti UCRT e li installano automaticamente nei sistemi operativi Windows in cui non sono installati per impostazione predefinita. Per altre informazioni, vedere Ridistribuzione di file Visual C++.

La distribuzione app-local della libreria UCRT è supportata, anche se non è consigliabile per motivi di prestazioni e di sicurezza. Le DLL per la distribuzione locale dell'app di UCRT sono incluse come parte di Windows SDK, nella redist sottodirectory . Le DLL necessarie includono ucrtbase.dll e un set di DLL del server d'inoltro APISet denominate api-ms-win-[subset].dll. Il set di DLL necessarie in ogni sistema operativo varia, quindi si consiglia di includere tutte le DLL quando si usa la distribuzione app-local. Per altre informazioni e consigli sulla distribuzione locale dell'app, vedere Distribuzione in Visual C++.

Modifiche a funzioni e macro di Universal CRT

Molte funzioni sono state aggiunte o aggiornate nella libreria UCRT per migliorare la conformità ISO C99 e risolvere i problemi relativi alla qualità e alla sicurezza del codice. In alcuni casi è stato necessario apportare modifiche significative alla libreria. Il codice compilato in modo pulito quando si usa una versione precedente di CRT può interrompersi durante la compilazione tramite UCRT. In tal caso, è necessario modificare il codice per sfruttare i vantaggi degli aggiornamenti e delle funzionalità ucrt. Per un elenco dettagliato delle modifiche e degli aggiornamenti importanti della libreria CRT rilevati nella libreria Universal CRT, vedere la sezione Libreria di runtime C (CRT) della cronologia delle modifiche di Visual C++. La sezione contiene un elenco di intestazioni e funzioni interessate che è possibile usare per identificare le modifiche necessarie nel codice.

Vedi anche

Guida al porting e aggiornamento in Visual C++
Panoramica dei potenziali problemi di aggiornamento (Visual C++)
Aggiornamento di progetti da versioni precedenti di Visual C++
Cronologia delle modifiche di Visual C++ dal 2003 al 2015
Miglioramenti della conformità di C++ in Visual Studio