Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporcionan soluciones para la solución de problemas del compilador de Visual C++ o del enlazador 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 tanta información como sea 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 Soporte técnico de Microsoft.
Solución
Problemas del compilador
Para problemas del compilador, como errores internos del compilador (es decir, C1001), bloqueos o bloqueos, puede ser ú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 Con números de línea (/P) o Sin números de línea (/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 está compilando, 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 preprocesador al usar este modificador, es decir, el compilador no generará ningún
.OBJ
archivo y es posible que obtenga un error de vínculo que refleje el hecho de que no se pueden encontrar 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 de origen o.CPP
en particular.C
. En otras palabras, es un módulo independiente que debe poder reproducir un problema de compilación sin dependencias en otros archivos. El archivo resultante a menudo será grande y contendrá una gran cantidad de espacio en blanco.Problemas de vínculos
En el caso de los problemas del enlazador (errores de tipo LNKxxxx), puede usar el modificador de línea de comandos del enlazador /LINKREPRO para generar un caso de prueba que contenga solo entradas del enlazador sin ninguna dependencia en 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 la 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, en el cuadro de edición Opciones adicionales , escriba el
/LINKREPRO:<path>
modificador (incluida la barra diagonal) y reemplace la ruta de acceso por la ruta de acceso de carpeta local preexistente. Por ejemplo:/LINKREPRO:C:\TEMP\LINKREPRO\
.Si ya hay otras opciones del enlazador en este cuadro de edición, sepárelas con comas.
Como alternativa, puede usar una variable de
LINK_REPRO
entorno. Si existe laLINK_REPRO
variable de entorno, el enlazador leerá la ruta de acceso de salida de la variable de entorno y generará un linkrepro. El modificador /LINKREPRO no es necesario cuando se usa la variable deLINK_REPRO
entorno. Para usar la variable deLINK_REPRO
entorno:Abra un símbolo del sistema de Visual Studio. Se instala en el menú Inicio, en la carpeta Visual Studio de la subcarpeta Visual Studio Tools.
Cree la variable de
LINK_REPRO
entorno que apunte a un directorio existente y vacío, por ejemplo:SET LINK_REPRO=C:\TEMP\LINKREPRO\
.Ejecute Visual Studio desde el mismo símbolo del sistema para que comparta una copia del entorno que ha modificado.
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 estará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), para que LINK ya no dependa del archivo de solución.
Para confirmar que tiene todos los archivos necesarios para reproducir el problema de 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, cuando se usa LIB.EXE o LINK /LIB.
Aviso de declinación de responsabilidades
Declinación de responsabilidades de publicación rápida
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 este documento se crea en respuesta a temas emergentes o únicos, o está destinada a complementar otra información knowledge base.
Aviso de declinación de responsabilidades
Microsoft y/o sus proveedores no hacen 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 ser revisados 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 e idoneidad para un fin determinado, con respecto a los materiales.