Solución de problemas del compilador de Microsoft Visual C++ o del vinculador de Visual C++

En este artículo se proporcionan soluciones para solucionar problemas del compilador de Visual C++ o del vinculador de Visual C++.

Se aplica a: Microsoft Visual C++ 2010 Express, Visual Studio
Número de KB original: 974229

Acción

Al investigar un posible problema con el compilador o enlazador de Microsoft Visual C++, es importante obtener la mayor cantidad de información posible sobre el proceso de compilación y las opciones que se usan. En este artículo se describen algunas sugerencias de solución de problemas para ayudar a resolver el problema de compilación o capturar información completa para el soporte técnico de Microsoft.

Resolución

  • Problemas del compilador

    En el caso de problemas del compilador, como errores internos del compilador (es decir, C1001), bloqueos o fallos, es útil capturar la salida del preprocesador de C/C++ para proporcionar un ejemplo de problema reproducible simplificado. En el IDE de Visual C++, esto se puede hacer estableciendo la propiedad Generar archivo preprocesado en With Line Numbers (/P) or Without Line Numbers (/EP /P). Esta propiedad se puede encontrar en las páginas de propiedades del proyecto en Propiedades de configuración, C/C++, Configuración del preprocesador.

    Esta configuración se puede establecer en el nivel de proyecto desde el menú Proyecto, Propiedades en cuyo caso generará .i archivos para todos los archivos de origen del proyecto o se puede establecer para un único archivo haciendo clic con el botón derecho en el archivo en el Explorador de soluciones, seleccionando el menú contextual Propiedades para abrir el cuadro de diálogo de propiedades para el único archivo.

    El modificador del compilador /P dirige CL.EXE para capturar la salida del preprocesador en un archivo. Al agregar /EP, se suprimirá la adición de información de número de línea al archivo resultante. /P es suficiente, pero /EP /P generará un archivo de salida más pequeño. El archivo de salida del preprocesador generado tendrá el mismo nombre que el archivo de origen que se compila, pero con la extensión de archivo a.i, por ejemplo, file1.cpp genera un archivo de salida de preprocesador file1.i en el mismo directorio.

    Nota:

    La compilación continuará más allá de la fase de preprocesamiento cuando se utiliza esta opción, lo que significa que el compilador no generará ningún archivo .OBJ y puede obtener un error de vínculo indicando que no se encuentran los archivos OBJ.

    Puede compilar el archivo de salida del preprocesador por sí mismo fuera del contexto de un proyecto de Visual Studio. El .i archivo contiene todo el código de archivo de encabezado, el reemplazo de macros y la información de directiva del compilador preprocesado necesaria para la compilación de ese archivo concreto .C o .CPP de origen. En otras palabras, es un módulo independiente que debe poder reproducir un problema de compilación sin dependencias de otros archivos. El archivo resultante suele ser grande y contendrá una gran cantidad de espacio en blanco.

  • Problemas de vínculo

    Para problemas del vinculador (errores de tipo LNKxxxx), puede usar la opción de línea de comandos del enlazador /LINKREPRO para generar una prueba que contenga solo entradas del enlazador sin depender de los archivos de origen. /LINKREPRO usa la sintaxis siguiente:

    /LINKREPRO:<path>

    '<path>' es la ruta de acceso completa a una carpeta vacía en el sistema de archivos local. Esta carpeta ya debe existir: el enlazador no lo creará automáticamente y generará un error si la carpeta no existe.

    Esta opción no se expone directamente en el sistema del proyecto. Para agregarlo a una compilación, abra el menú Propiedades del proyecto en el menú Proyecto . En Propiedades de configuración, Enlazador, Línea de comandos, escriba en el cuadro de edición Opciones adicionales el modificador (incluida la barra inclinada) y reemplace la ruta con la ruta de acceso de una carpeta local existente. Por ejemplo: /LINKREPRO:C:\TEMP\LINKREPRO\.

    Si ya hay otras opciones del enlazador en este cuadro de edición, separe con comas.

    Como alternativa, puede usar una LINK_REPRO variable de entorno. Si la variable de entorno LINK_REPRO existe, el editor de enlaces leerá la ruta de acceso de salida de la variable de entorno y generará un linkrepro. El modificador /LINKREPRO no es necesario al usar la variable de entorno LINK_REPRO. Para usar la variable de entorno LINK_REPRO:

    1. Abre la consola de comandos de Visual Studio. Esto se instala en el menú Inicio , en la carpeta Visual Studio de la subcarpeta Visual Studio Tools.

    2. Cree la LINK_REPRO variable de entorno que apunta a un directorio existente y vacío, por ejemplo: SET LINK_REPRO=C:\TEMP\LINKREPRO\.

    3. Ejecute Visual Studio desde la misma consola para que comparta el entorno que ha modificado.

    4. Abra el proyecto y realice una recompilación de todo el proyecto.

    Cuando se invoca LINK.EXE en la compilación, copiará todo lo que necesita para vincular el proyecto al directorio linkrepro. Entre los archivos copiados se incluirán los archivos de objeto (. OBJ), archivos de biblioteca necesarios (. LIB), incluidas las bibliotecas de Microsoft y un archivo de respuesta del enlazador (LINK. RSP), de modo que LINK ya no dependa del archivo de solución.

    Para confirmar que tiene todos los archivos necesarios para reproducir el problema del vínculo, puede ejecutar LINK en el directorio especificado por la variable de entorno LINK_REPRO, mediante el archivo de respuesta del enlazador generado por linkrepro: LINK @link.rsp.

    Antes de hacerlo, use el siguiente comando para desactivar esta característica si usa la variable de entorno de la línea de comandos: SET LINK_REPRO=.

    También puede usar este proceso para comprobar los archivos implicados en la creación de una biblioteca, al usar LIB.EXE o LINK /LIB.

Aviso de declinación de responsabilidades

Aviso legal de publicación inmediata

LOS ARTÍCULOS DE PUBLICACIÓN RÁPIDA PROPORCIONAN INFORMACIÓN DIRECTAMENTE DESDE LA ORGANIZACIÓN DE SOPORTE TÉCNICO DE MICROSOFT. LA INFORMACIÓN CONTENIDA EN EL PRESENTE DOCUMENTO SE CREA EN RESPUESTA A TEMAS EMERGENTES O ÚNICOS, O SE PRETENDE COMPLEMENTAR OTRA INFORMACIÓN DE LA BASE DE CONOCIMIENTO.

Declinación de responsabilidades

MICROSOFT Y/O SUS PROVEEDORES NO REALIZAN NINGUNA REPRESENTACIÓN O GARANTÍA SOBRE LA IDONEIDAD, CONFIABILIDAD O PRECISIÓN DE LA INFORMACIÓN CONTENIDA EN LOS DOCUMENTOS Y GRÁFICOS RELACIONADOS PUBLICADOS EN ESTE SITIO WEB (LOS "MATERIALES") PARA CUALQUIER PROPÓSITO. LOS MATERIALES PUEDEN INCLUIR IMPRECISIONES TÉCNICAS O ERRORES TIPOGRÁFICOS Y PUEDEN REVISARSE EN CUALQUIER MOMENTO SIN PREVIO AVISO.

EN LA MEDIDA MÁXIMA PERMITIDA POR LA LEY APLICABLE, MICROSOFT Y/O SUS PROVEEDORES RENUNCIAN Y EXCLUYEN TODAS LAS REPRESENTACIONES, GARANTÍAS Y CONDICIONES, YA SEAN EXPRESAS, IMPLÍCITAS O LEGALES, INCLUIDAS, ENTRE OTRAS, LAS REPRESENTACIONES, GARANTÍAS O CONDICIONES DE TÍTULO, NO INFRACCIÓN, CONDICIÓN SATISFACTORIA O CALIDAD, COMERCIABILIDAD Y IDONEIDAD PARA UN PROPÓSITO DETERMINADO, CON RESPECTO A LOS MATERIALES.