Atualize seu código para o CRT Universal
A CRT (Biblioteca de Runtime do Microsoft C) foi refatorada no Visual Studio 2015. A biblioteca padrão do C, as extensões POSIX e as funções, macros e variáveis globais específicas da Microsoft foram movidas para uma nova biblioteca, a Biblioteca em runtime do C Universal (Universal CRT ou UCRT). Os componentes específicos do compilador do CRT foram movidos para uma nova biblioteca vcruntime.
O UCRT agora é um componente do Windows e é fornecido como parte do Windows 10 e posteriores. O UCRT dá suporte a uma ABI estável baseada em convenções de chamada C, e está em estreita conformidade com o padrão ICO C99, com apenas algumas exceções. Ele não está mais associado a uma versão específica do compilador. É possível usar o UCRT em qualquer versão do Windows com suporte no Visual Studio 2015 ou no Visual Studio 2017. A vantagem é que você não precisa mais atualizar seus builds para definir como destino uma nova versão do CRT com cada atualização do Visual Studio.
Essa refatoração alterou os nomes ou locais de muitos arquivos de cabeçalho, arquivos de biblioteca e arquivos redistribuíveis e os métodos de implantação necessários para seu código. Muitas funções e macros no UCRT também foram adicionados ou alterados para melhorar a conformidade com os padrões. Para aproveitar essas alterações, é necessário atualizar seu código existente e sistemas de build de projeto.
Onde localizar os arquivos do CRT Universal
Como um componente do Windows, os cabeçalhos e arquivos de biblioteca UCRT agora fazem parte do SDK (software development kit) do Windows. Quando você instala o Visual Studio, as partes do SDK do Windows necessárias para usar o UCRT também são instaladas. O instalador do Visual Studio adiciona os locais dos cabeçalhos, bibliotecas e arquivos DLL do UCRT aos caminhos padrão usados pelo sistema de build do projeto do Visual Studio. Ao atualizar seus projetos do Visual Studio C++, se eles usarem as configurações de projeto padrão, o IDE localizará automaticamente os novos locais para arquivos de cabeçalho. E, o vinculador usará automaticamente as novas bibliotecas PADRÃO UCRT e vcruntime. Da mesma forma, se você usar um prompt de comando do desenvolvedor para fazer builds de linha de comando, as variáveis do ambiente que contêm caminhos para cabeçalhos e bibliotecas serão atualizadas e funcionarão automaticamente também.
Agora os arquivos de cabeçalho da biblioteca padrão do C são encontrados no SDK do Windows em uma pasta de inclusão em um diretório específico da versão do SDK. Um local típico para os arquivos de cabeçalho está no diretório Arquivos de programa ou Arquivos de programa (x86) em Windows Kits\10\Include\[sdk-version]\ucrt
, onde [sdk-version]
corresponde a uma versão ou atualização do Windows, por exemplo, 10.0.14393.0 para a atualização de aniversário do Windows 10.
As bibliotecas estáticas do UCRT e bibliotecas de stub de link dinâmico são encontradas no diretório Program Files ou Program Files (x86) em Windows Kits\10\Lib\[sdk-version]\ucrt\[architecture]
, onde architecture
é ARM64, x86 ou X64. As bibliotecas estáticas de varejo e depuração são libucrt.lib
e libucrtd.lib
, e as bibliotecas para as DLLs UCRT são ucrt.lib
e ucrtd.lib
.
As DLLs comerciais e de depuração do UCRT são encontradas em locais separados. As DLLs de varejo são arquivos redistribuíveis e podem ser encontrados no diretório Arquivos de programas ou Arquivos de programas (x86) em Windows Kits\10\Redist\ucrt\DLLs\[architecture]\
. As bibliotecas de depuração UCRT não são arquivos redistribuíveis e podem ser encontradas no diretório Arquivos de programas ou Arquivos de programas (x86) na pasta Windows Kits\10\bin\[architecture]\ucrt
.
Onde encontrar as bibliotecas e cabeçalhos padrão
A biblioteca de suporte em tempo de execução específica do compilador C e C++, vcruntime
, contém o código necessário para dar suporte à inicialização e aos recursos do programa como tratamento de exceção e intrínsecos. A biblioteca e seus arquivos de cabeçalho ainda são encontrados na pasta do Microsoft Visual Studio específica da versão em seu diretório de Arquivos de Programas ou Arquivos de Programas (x86).
No Visual Studio 2017, 2019 e 2022, os arquivos de cabeçalho são encontrados em Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\include
. Aqui, [year]
é a versão do Visual Studio, [edition]
é a edição ou apelido do Visual Studio e [lib-version]
é a versão de build das bibliotecas.
As bibliotecas de link são encontradas em Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\lib\[architecture]
, onde [year]
é a versão do Visual Studio, [edition]
é a edição ou apelido do Visual Studio, [lib-version]
é a versão de build das bibliotecas e [architecture]
é a arquitetura do processador de destino. As bibliotecas de links para OneCore e Store também são encontradas na pasta de bibliotecas.
As versões de varejo e de depuração da biblioteca estática são libvcruntime.lib
e libvcruntimed.lib
. As bibliotecas dinâmicas stub de depuração e de comércio de link são vcruntime.lib
e vcruntimed.lib
, respectivamente.
Ao atualizar seus projetos do Visual Studio C++, se você tiver definido a propriedade Ignorar todas as bibliotecas padrão do Vinculador do projeto como Sim ou se você usar a opção do vinculador /NODEFAULTLIB
na linha de comando, será necessário atualizar sua lista de bibliotecas para incluir as bibliotecas novas e refatoradas. Substitua a biblioteca CRT antiga, por exemplo, libcmt.lib
, libcmtd.lib
, msvcrt.lib
ou msvcrtd.lib
pelas bibliotecas refatoradas equivalentes. Para obter informações sobre as bibliotecas específicas a serem usadas, consulte Recursos da biblioteca CRT.
Implantação e redistribuição do CRT Universal
Como o UCRT agora é um componente do sistema operacional Microsoft Windows, está incluído como parte do sistema operacional no Windows 10 e posteriores. Ele está disponível por meio do Windows Update para sistemas operacionais mais antigos, o Windows Vista por meio do Windows 8.1. Uma versão redistribuível está disponível para o Windows XP. Como um componente de sistema operacional, as atualizações e a manutenção do UCRT são gerenciadas pelo Windows Update independentemente das versões de compilador do Visual Studio e do Microsoft C++. Como o UCRT é um componente do Windows, para obter segurança e facilidade de atualizações, e um tamanho de imagem menor, recomendamos que use o pacote Redistribuível para fazer a implantação centralizada do UCRT para seu aplicativo.
É possível usar o UCRT em qualquer versão do Windows com suporte no Visual Studio 2015 ou posteriores. É possível redistribuí-lo usando um pacote vcredist
para versões com suporte do Windows anteriores ao Windows 10. Os pacotes vcredist
incluem os componentes UCRT e os instala automaticamente nos sistemas operacionais Windows em que eles não estão instalados por padrão. Para obter mais informações, consulte Redistribuindo arquivos do Visual C++.
Há suporte para a implantação local de aplicativos, embora isso não seja recomendado por motivos de desempenho e de segurança. As DLLs para implantação local de aplicativos do UCRT são incluídas como parte do SDK do Windows, no subdiretório redist
. As DLLs necessárias incluem ucrtbase.dll
e um conjunto de DLLs do encaminhador de APISet denominado api-ms-win-[subset].dll
. O conjunto de DLLs necessário em cada sistema operacional varia. Portanto, recomendamos que você inclua todas as DLLs ao usar a implantação local de aplicativos. Para obter mais informações e recomendações sobre a implantação local do aplicativo, consulte Implantação no Visual C++.
Alterações nas funções e nas macros do CRT Universal
Muitas funções foram adicionadas ou atualizadas no UCRT para melhorar a conformidade com a ISO C99 e para solucionar problemas de segurança e de qualidade do código. Em alguns casos, isso exigiria alterações significativas na biblioteca. Seu código que foi compilado de forma limpa ao usar uma versão mais antiga do CRT pode ser interrompido quando você o compila usando o UCRT. Nesse caso, você deve alterar seu código para aproveitar as atualizações e os recursos do UCRT. Para obter uma lista detalhada das alterações e atualizações significativas no CRT encontrado no CRT Universal, consulte a seção C Runtime Library (CRT) (CRT – Biblioteca em tempo de execução do C) do histórico de alterações do Visual C++. Inclui uma lista de funções e cabeçalhos afetados que podem ser usados para identificar as alterações necessárias em seu código.
Confira também
Guia de atualização e portabilidade do Visual C++
Visão geral de possíveis problemas de atualização (Visual C++)
Como atualizar projetos de versões anteriores do Visual C++
Histórico de alterações de 2003 a 2015 do Visual C++
Aprimoramentos de conformidade do C++ no Visual Studio