2008-10-31 5 views
14

Al compilar bibliotecas estáticas con VS2005, sigo recibiendo advertencias del enlazador de que no se puede encontrar VC80.pdb con mi library.lib. Aparentemente, como resultado, la función de edición y continuación del IDE no funciona en ningún proyecto que incorpore library.libvc80.pdb - ¿Cómo puedo hacer que desaparezca y nunca más volver a molestarme?

Qué magia es necesaria para decirle a VS2005 que produzca una lib estática con edición y continúe depurando información que NO haga referencia o requiere vs80.pdb cuando se vincula a un proyecto?

- Comprensión adicional-- Entonces, para poder editar y continuar funcionando con una lib estática pre compilada, necesitamos colocar el archivo vs80.pdb y vs80.pdb en SVN junto con el .lib, Y renombra el pdb/idb para evitar conflictos al hacer esto con múltiples libs compiladas previamente.

+6

+1 para el título. :) – BobbyShaftoe

Respuesta

6

vc80.pdb es el archivo que contiene la información de depuración para su lib. En las páginas de propiedades ide: propiedades de configuración: c \ C++: los archivos de salida le permiten cambiar el nombre a algo más apropiado, como el nombre de su lib. Cuando el enlazador vincula su lib al exe de destino, busca este pdb (hay un puntero en el lib) y extrae la información de ese pdb y la suelta en el pdb del exe.

/Fd [nombre] es la opción para cambiar el nombre del pdb /ZI es la opción para compilar con un pdb que incluye información de Edición y Continuar.

Todas las bibliotecas vinculadas y el último taget exe o dll necesitan/ZI, para habilitar editar y continuar.

me hizo una pequeña testlib.lib y utilizado "dumpbin/all" para obtener la siguiente muestra el puntero a la información de depuración (este es un pequeño extracto):

SECTION HEADER #7 
.debug$T name 
     0 physical address 
     0 virtual address 
     48 size of raw data 
    838 file pointer to raw data (00000838 to 0000087F) 
     0 file pointer to relocation table 
     0 file pointer to line numbers 
     0 number of relocations 
     0 number of line numbers 
42100040 flags 
     Initialized Data 
     Discardable 
     1 byte align 
     Read Only 

RAW DATA #7 
    00000000: 04 00 00 00 42 00 15 15 D5 EA 1E C9 7C 10 3A 40 ....B...Õê.É|.:@ 
    00000010: 93 63 CE 95 77 15 49 4A 03 00 00 00 64 3A 5C 64 .cÎ.w.IJ....d:\d 
    00000020: 65 76 5C 74 65 73 74 5C 74 65 73 74 6C 69 62 5C ev\test\testlib\ 
    00000030: 74 65 73 74 6C 69 62 5C 64 65 62 75 67 5C 76 63 testlib\debug\vc 
    00000040: 38 30 2E 70 64 62 00 F1       80.pdb.ñ 
+0

Lo que no entiendo acerca de esto es que hay un PDB especificado en la configuración del compilador usando/Fd [nombre] que por defecto es vc80.pdb Y hay un pdb en la configuración del enlazador, que por defecto es $ (nombre de destino). pdb ¿Siempre necesito ambos pdbs? –

+1

Sí, desafortunadamente los ajustes del conjunto de herramientas de VC parecen ser NP completos. http://sourceforge.net/projects/pdbdump tiene una herramienta para mirar dentro de pdbs. Eso y dumpbin pueden ayudar a entender dónde fluye la información de depuración a través de la cadena de herramientas. –

4

Si se puede vivir sin " edita y continúa ', intenta usar /Z7.
Lo uso para todos los archivos .lib que están almacenados en control de fuente. No se crea ningún archivo .pdb: la información de depuración se almacena dentro del archivo .lib.

+1

¿Por qué no ha recibido esto ningún voto positivo? De todos modos +1 de mí. – 0xC0000022L

Cuestiones relacionadas