Compatibilidad binaria de C++ entre versiones de Visual Studio

Los conjuntos de herramientas del compilador de Microsoft C++ (MSVC) en Visual Studio 2013 y versiones anteriores no garantizan la compatibilidad binaria entre las versiones principales. No se pueden vincular archivos de objeto, bibliotecas estáticas, bibliotecas dinámicas y ejecutables creados por diferentes versiones de estos conjuntos de herramientas. Las API, los formatos de objeto y las bibliotecas en tiempo de ejecución son incompatibles.

Hemos cambiado este comportamiento en Visual Studio 2015 y versiones posteriores. Las bibliotecas en tiempo de ejecución y las aplicaciones compiladas por cualquiera de estas versiones del compilador son compatibles con binarios. Se refleja en el número principal del conjunto de herramientas de C++, que comienza con 14 para todas las versiones desde Visual Studio 2015. (La versión del conjunto de herramientas es v140 para Visual Studio 2015, v141 para 2017, v142 para 2019 y v143 para 2022). Diga que tiene bibliotecas de terceros creadas por Visual Studio 2015. Todavía puede usarlos en una aplicación creada por Visual Studio 2017, 2019 o 2022. No es necesario volver a compilar con un conjunto de herramientas correspondiente. La versión más reciente del Microsoft Visual C++ redistribuible (redistribuible) funciona para todos ellos.

Restricciones de compatibilidad binaria

Hay tres restricciones importantes en la compatibilidad binaria entre los conjuntos de herramientas v140, v141, v142 y v143 y las actualizaciones de versiones secundarias numeradas:

  • Puede mezclar archivos binarios creados por diferentes versiones de los conjuntos de herramientas v140, v141, v142 y v143. Sin embargo, debe vincular mediante un conjunto de herramientas al menos tan reciente como el binario más reciente de la aplicación. Este es un ejemplo: puede vincular una aplicación compilada mediante cualquier conjunto de herramientas de 2017 (v141, versiones 15.0 a 15.9) a una biblioteca estática compilada mediante, por ejemplo, Visual Studio 2019 versión 16.2 (v142). Solo tiene que vincularlos mediante un conjunto de herramientas de la versión 16.2 o posterior. Puede vincular una biblioteca de la versión 16.2 a una aplicación de la versión 16.4 siempre que use un conjunto de herramientas 16.4 o posterior.

  • Redistributable que usa la aplicación tiene una restricción de compatibilidad binaria similar. Cuando se mezclan archivos binarios creados por distintas versiones compatibles del conjunto de herramientas, la versión redistribuible debe ser al menos tan nueva como el conjunto de herramientas más reciente que usa cualquier componente de aplicación.

  • Las bibliotecas estáticas o los archivos de objeto compilados mediante el modificador del compilador (optimización de todo el programa) o vinculados mediante (generación de código en tiempo de vínculo)no son compatibles binariamente entre versiones, incluidas las actualizaciones de versiones secundarias. Todos los archivos y bibliotecas de objetos compilados con y deben usar exactamente el mismo conjunto de herramientas para la /GL/LTCG compilación y el vínculo final. Por ejemplo, el código generado mediante en el conjunto de herramientas de la versión 16.7 de Visual Studio 2019 no se puede vincular al código generado mediante en el conjunto de herramientas /GL/GL de Visual Studio 2019 versión 16.8. El compilador emite un error irreales C1047.

Actualización de Microsoft Visual C++ Redistributable desde Visual Studio 2015 y versiones posteriores

Hemos mantenido el número de versión principal Microsoft Visual C++ Redistributable igual para Visual Studio 2015, 2017, 2019 y 2022. Esto significa que solo se puede instalar una instancia de Redistributable a la vez. Una versión más reciente sobrescribe cualquier versión anterior que ya esté instalada. Por ejemplo, una aplicación puede instalar Redistributable desde Visual Studio 2015. A continuación, otra aplicación instala redistribuible desde Visual Studio 2022. La versión 2022 sobrescribe la versión anterior, pero como son compatibles con archivos binarios, la aplicación anterior sigue funcionando bien. Nos aseguramos de que la versión más reciente de Redistributable tiene todas las características más recientes, actualizaciones de seguridad y correcciones de errores. Por eso siempre se recomienda actualizar a la versión más reciente disponible.

Del mismo modo, no se puede instalar una versión anterior de Redistributable cuando ya hay instalada una versión más reciente. Si lo intenta, el instalador notifica un error. Verá un error como este si instala 2017 o 2019 Redistributable en una máquina que ya tiene la versión 2022:

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 error se produce por diseño. Se recomienda mantener instalada la versión más reciente. Asegúrese de que el instalador puede recuperarse de este error de forma silenciosa.

Importante

La compatibilidad de la biblioteca en tiempo Windows xp ya no está disponible en la versión Visual C++ Redistributable para Visual Studio. La última redistribuible para admitir Windows XP es la versión 16.7 (archivo versión 14.27.29114.0). Si las aplicaciones de Windows XP se implementan o se actualizan a una versión posterior del objeto redistribuible, no se ejecutarán. Para obtener más información y cómo obtener una versión de redistribuible compatible con Windows XP, consulte Configuración de programas para Windows XP.

Vea también

Historial de cambios en Visual C++
Las últimas descargas de Visual C++ Redistributable compatibles