2008-10-31 3 views
14

Lors de la construction de bibliothèques statiques avec VS2005, je reçois des avertissements de liens que VC80.pdb ne peut pas trouver avec ma bibliothèque.lib. Apparemment, la fonction d'édition et de continuation de l'EDI échoue à tout projet incorporant library.libvc80.pdb - Comment puis-je le faire disparaître et ne plus me déranger?

Quelle magie est nécessaire pour dire à VS2005 de produire une librairie statique avec éditer et continuer les informations de débogage qui ne font PAS référence ou exiger vs80.pdb lorsqu'il est lié à un projet? Donc, pour obtenir l'édition-et-continuer à fonctionner avec une bibliothèque statique pré-compilée, nous devons placer le fichier vs80.pdb et vs80.pdb dans SVN avec the .lib, AND renommer le pdb/idb pour éviter les conflits en faisant cela avec plusieurs bibliothèques pré-compilées.

+6

+1 pour le titre. :) – BobbyShaftoe

Répondre

6

vc80.pdb est le fichier qui contient les informations de débogage pour votre lib. Dans les pages de propriétés d'ide: propriétés de configuration: c \ C++: les fichiers de sortie vous permettent de renommer ceci en quelque chose de plus approprié, tel que le nom de votre lib. Quand le lieur lie votre lib dans l'exe cible, il cherche ce pdb (il y a un pointeur dans la lib) et extrait l'information de ce pdb et le dépose dans le pdb de l'exe.

/Fd [nom] est l'option pour renommer le pdb /ZI est l'option pour compiler avec un pdb qui inclut des informations d'édition et de continuer.

Toutes les bibliothèques liées et le dernier tag exe ou dll ont besoin de/ZI, pour permettre l'édition et continuer.

J'ai fait un petit testlib.lib et utilisé « dumpbin/all » pour obtenir les éléments suivants montrant le pointeur sur les informations de débogage (ce qui est un extrait minuscule):

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

La chose que je ne comprends pas est une PDB spécifiée dans les paramètres du compilateur en utilisant/Fd [nom] qui vaut par défaut vc80.pdb ET il y a un pdb dans les paramètres de l'éditeur de liens, par défaut $ (targetname). pdb J'ai toujours besoin des deux pdbs? –

+1

Oui, malheureusement, les arrangements de l'ensemble d'outils VC semblent être complets. http://sourceforge.net/projects/pdbdump a un outil pour regarder à l'intérieur de pdbs. Cela et le vidage peuvent aider à comprendre où les informations de débogage circulent à travers la chaîne d'outils. –

4

Si vous pouvez vivre sans ' éditez et continuez ", essayez d'utiliser /Z7.
Je l'utilise pour tous les fichiers .lib qui sont stockés dans le contrôle de source. Aucun fichier .pdb n'est créé - les informations de débogage sont stockées dans le fichier .lib.

+1

Pourquoi cela n'a-t-il pas eu de upvotes? De toute façon +1 de moi. – 0xC0000022L

Questions connexes