Puede no un intento de crear una biblioteca de depuración que utiliza encabezados precompilados y se pueden generar errores de generación grave

Seleccione idioma Seleccione idioma
Id. de artículo: 102697 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Intento de crear una biblioteca de depuración que utiliza encabezados precompilados puede producir un error y pueden generarse errores de generación grave. Con 16-bit edition, las utilidades CVPACK y LINK pueden generar el mensaje de error siguientes:
Error grave de CVPACK: CK1017: no puede encontrar tipos precompilados archivo; vincule con file.obj
LINK: advertencia LNK4027: error CVPACK\0
Con la edición de 32 bits, la utilidad LINK puede generar el mensaje de error siguientes:
<filename>Error grave de LINK: LNK1211: precompilado tipo no se encontró información; "<nombredearchivo>" no vinculado o reemplazado
Nota Si se genera una biblioteca estática en una versión Visual Studio.NET con archivo de encabezado precompilado y usar modificadores de la depuración del compilador /Zi o /Zi, quizás no reciba los errores que aparecen en este artículo, pero puede ver cualquiera de los siguientes dos problemas mientras depura su aplicación y intentando ver las variables de la biblioteca en la ventana Inspección:
  • Puede recibir el siguiente mensaje de error en la inspección ventana:
    CXX0033:Error:error en información de tipo OMF
  • Al expandir un objeto de clase, puede ver sólo las entradas en blanco para los miembros de clase.
La solución para este problema de depuración es la misma que se describe en la sección "Solución" de este artículo.

Causa

Cuando especifica el /Yc y / Z7 opciones en la línea de comandos del compilador, c/c Microsoft genera un archivo encabezado precompilado que contiene información de depuración de CodeView. El error produce sólo cuando se almacena el encabezado precompilado en una biblioteca, utilice la biblioteca generar un módulo de objeto y el código fuente no hace referencia a cualquiera de las funciones que define el archivo de encabezado precompilado.

Solución

Hay dos métodos para evitar esta situación, como sigue:
  • Especificar el modificador de opción del compilador /Yd para agregar la información CodeView del encabezado precompilado a cada módulo de objeto. Este método es menos deseable, porque suele generar módulos de objeto grande que pueden aumentar el tiempo necesario para vincular la aplicación.
  • Nota La siguiente solución temporal es de sólo las versiones de 32 bits. Especificar el /Yl<symbol> modificador de opción del compilador, donde <symbol> es el nombre de un símbolo arbitrario de la biblioteca, cuando cree un archivo de encabezado precompilado que no contiene definiciones de función. Este modificador indica al compilador para almacenar la información de depuración en el archivo de encabezado precompilado.

Estado

Este comportamiento es por diseño.

Más información

Cuando se compila un módulo con /Yc y /Yl<symbol_name> modificadores de opción mediante la edición de 32 bits, el compilador crea un símbolo similar a __@@_PchSym_@00 @... @ <symbol_name>, donde los puntos suspensivos (...) representa un vinculador genera cadena de caracteres y lo almacena en el módulo de objeto. Cualquier archivo de origen que se compila con este encabezado precompilado hace referencia al símbolo especificado, que hace que el vinculador incluir el módulo de objeto y su información de depuración de la biblioteca.

En el siguiente ejemplo de código se muestra el problema.

Código de ejemplo

   /*

    * To demonstrate this problem, perform the following five steps:
    *
    * 1. Compile TEST1.C as follows: cl /Yctest.h /Z7 /c TEST1.C
    * 2. Compile TEST2.C as follows: cl /Yutest.h /Z7 /c TEST2.C
    * 3. Build a library that contains TEST1.OBJ and TEST2.OBJ as
    *    follows: lib /out:test.lib test1.obj test2.obj
    * 4. Compile TEST3.C as follows: cl /Yutest.h /Z7 /c TEST3.C
    * 5. Link the application as follows:
    *       link /debugtype:cv /debug:notmapped,full test3.obj test.lib
    *
    * To correct this problem, do one of the following:
    *
    *   1. 32-bit only)  Compile TEST1.C in step 1 as follows:
    *        cl /Yctest.h /YlAnyName /Z7 /c TEST1.C
    *      Then, repeat step 2 through 5.
    *
    *   2. Repeat steps 1 through 5, adding the /Yd command line option
    *      to steps 1, 2, and 4.

    */ 
				

TEST.H

   #include <stdio.h>
				

TEST1.C

   #include "test.h"
				

TEST2.C

   #include "test.h"

   void test2func(void)
   {
      printf("inside TEST2FUNC...\n");
   }
				

TEST3.C

   #include "test.h"

   void test2func(void);

   void main(void)
   {
      printf("inside MAIN...\n");
   }
				

Propiedades

Id. de artículo: 102697 - Última revisión: sábado, 01 de marzo de 2014 - Versión: 5.1
La información de este artículo se refiere a:
  • Microsoft Visual C++ 1.0 Professional Edition
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 1.51
  • Microsoft Visual C++ 1.52 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 2.2
  • Microsoft Visual C++ 4.1 Subscription
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise
  • Microsoft Visual C++ 5.0 Professional
  • Microsoft Visual C++ 6.0 Professional
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Visual C++ .NET 2003 Standard
  • Microsoft Visual C++ .NET 2002 Standard
  • Microsoft Visual C++ 2005 Express Edition
Palabras clave: 
kbnosurvey kbarchive kbmt kberrmsg kbtshoot kbcompiler kbprb KB102697 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 102697

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com