Partilhar via


Compatibilidade binária C++ entre versões do Visual Studio

As ferramentas de compilação do Microsoft C++ (MSVC) no Visual Studio 2013 e versões anteriores não garantem compatibilidade binária entre as versões principais. Não é possível vincular arquivos de objeto, bibliotecas estáticas, bibliotecas dinâmicas e executáveis criados por diferentes versões dessas ferramentas de compilação. Os ABIs, formatos de objeto e bibliotecas de tempo de execução são incompatíveis.

Alteramos esse comportamento no Visual Studio 2015 e versões posteriores. As bibliotecas de tempo de execução e os aplicativos compilados por qualquer uma dessas versões do compilador são compatíveis com binários. Isso se reflete no número principal das Ferramentas de Compilação do MSVC, que começa com 14 para todas as versões desde o Visual Studio 2015. (A versão das ferramentas de compilação é v140 para Visual Studio 2015, v141 para 2017, v142 para 2019 e v143 para 2022). Digamos que você tenha bibliotecas de terceiros criadas pelo Visual Studio 2015. Você ainda pode usá-los em um aplicativo criado pelo Visual Studio 2017, 2019, 2022 ou 2026. Não há necessidade de recompilar com uma versão correspondente. A versão mais recente do pacote Microsoft Visual C++ Redistributable (o Redistributable) funciona para todos eles.

Restrições à compatibilidade binária

Há três restrições importantes quanto a compatibilidade binária entre as ferramentas de compilação v140, v141, v142, v143 e v145 e versões de atualização menor numeradas.

  • Binários criados com diferentes versões das ferramentas de compilação v140, v141, v142, v143 e v145 podem ser combinados. A regra principal é que o vinculador só deve trabalhar com entradas construídas por ferramentas de compilação que são da mesma versão (ou anterior) que ele próprio. Isso se aplica a aplicativos, bibliotecas de importação, bibliotecas estáticas e outros arquivos, conforme descrito em arquivos de entrada LINK. Em alguns casos, uma biblioteca de importação para uma DLL implicitamente vinculada criada por uma versão posterior das ferramentas de compilação pode ser vinculada usando uma versão anterior das ferramentas de compilação, especialmente se a biblioteca de importação usa extern "C" estritamente para as importações/exportações. Aqui estão alguns exemplos do que tudo isso significa:
    • Um aplicativo compilado com as ferramentas de compilação de 2017 (v141, versões 15.0 a 15.9) pode ser vinculado a uma biblioteca estática compilada com o Visual Studio 2022 versão 17.8 (v143), mas a vinculação deve ser feita usando uma versão 17.8 ou ferramentas de compilação posteriores.
    • Aplicativos e bibliotecas criados usando VS 2015, 2017, 2019, 2022 e 2026 podem ser vinculados, mas a vinculação deve ser feita usando uma versão das ferramentas de compilação que seja tão recente quanto, ou mais recente do que, as ferramentas de compilação mais recentes usadas para criar qualquer um dos binários que você passa para o vinculador. Por exemplo, dados três binários criados com ferramentas de compilação do VS 2015 versão 14.3, VS 2017 versão 15.9 e VS 2019 versão 16.11, você pode vinculá-los usando qualquer versão de ferramentas de compilação que seja 16.11 ou posterior.
    • Se uma DLL for criada com ferramentas de compilação mais recentes, a biblioteca de importação às vezes poderá ser usada com ferramentas de compilação mais antigas se todas as exportações seguirem a convenção de chamada de linguagem C (extern "C"). No entanto, o único caso oficialmente suportado é consumir um SDK do Windows mais recente com ferramentas de compilação mais antigas.
  • O Redistribuível que seu aplicativo usa tem uma restrição de compatibilidade binária semelhante. Quando você mistura binários criados por diferentes versões suportadas das ferramentas de compilação, a versão Redistribuível deve ser pelo menos tão nova quanto as ferramentas de compilação mais recentes usadas por qualquer componente do aplicativo.
  • Bibliotecas estáticas ou arquivos de objeto compilados usando o switch de compilador /GL (Otimização de todo o programa) ou vinculados usando /LTCG (geração de código em tempo de link)não são compatíveis binários entre versões, incluindo atualizações de versões secundárias. Todos os arquivos de objeto e bibliotecas compilados usando /GL e /LTCG devem usar exatamente as mesmas ferramentas de compilação para a compilação e o link final. Por exemplo, o código criado usando /GL as ferramentas de compilação do Visual Studio 2019 versão 16.7 não pode ser vinculado ao código criado usando /GL as ferramentas de compilação do Visual Studio 2019 versão 16.8. O compilador emite erro fatal C1047.

Efetuar a atualização do Microsoft Visual C++ Redistributable do Visual Studio 2015 e versões posteriores

Mantivemos o número da versão principal do Microsoft Visual C++ Redistributable igual para o Visual Studio 2015, 2017, 2019, 2022 e 2026. Isso significa que apenas uma instância do Redistributable pode ser instalada de cada vez. Uma versão mais recente substitui qualquer versão mais antiga que já esteja instalada. Por exemplo, um aplicativo pode instalar o Redistributable do Visual Studio 2015. Em seguida, outro aplicativo instala o Redistributable do Visual Studio 2026. A versão 2026 substitui a versão mais antiga, mas como eles são compatíveis com binários, o aplicativo anterior ainda funciona bem. Certificamo-nos de que a versão mais recente do Redistribuível tem todas as funcionalidades mais recentes, atualizações de segurança e correções de bugs. É por isso que recomendamos sempre que atualize para a versão mais recente disponível.

Da mesma forma, não é possível instalar um Redistribuível mais antigo quando uma versão mais recente já está instalada. O instalador relata um erro se tentares. Por exemplo, você verá um erro como este se instalar o Redistribuível 2022 em uma máquina que já tenha a versão 2026:

0x80070666 - Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel.

Este erro é por design. Recomendamos que mantenha a versão mais recente instalada. Certifique-se de que o instalador pode recuperar deste erro silenciosamente.

Importante

O suporte da biblioteca de tempo de execução para o Windows XP não está mais disponível no Visual C++ Redistributable for Visual Studio mais recente. O último redistribuível a suportar o Windows XP é a versão 16.7 (versão do ficheiro 14.27.29114.0). Se os seus aplicativos do Windows XP forem distribuídos com ou atualizados para uma versão posterior da distribuição, os aplicativos não serão executados. Para obter mais informações e como obter uma versão do redistribuível que suporte o Windows XP, consulte Configurando programas para o Windows XP.

Ver também

Histórico de alterações do Visual C++
Os últimos downloads suportados do Visual C++ Redistributable
Como auditar o uso da versão do Visual C++ Runtime
Perguntas frequentes sobre o ciclo de vida do - Visual C++ Redistribuível e bibliotecas de tempo de execução