2008-10-31 44 views
14

当使用VS2005构建静态库时,我不断收到链接器警告,指出VC80​​.pdb无法在我的library.lib中找到。显然,因此,IDE的编辑和继续功能无法工作任何包含库的项目.libvc80.pdb - 我如何让它消失,再也不打扰我了?

需要什么神奇来告诉VS2005使用编辑生成静态库并继续调试信息不​​参考或链接到项目时需要vs80.pdb?

--Upon进一步Understanding-- 因此,为了得到编辑并继续进行预编译静态库的功能,我们需要将vs80.pdb和vs80.pdb文件放入SVN沿.lib,并重命名pdb/idb以防止在使用多个预编译库时执行此操作时发生冲突。

+6

标题为+1。 :) – BobbyShaftoe 2008-12-05 06:38:42

回答

6

vc80.pdb是包含lib的调试信息的文件。在ide Property页面:配置属性:c \ C++:输出文件允许您将其重命名为更合适的内容,例如lib的名称。当链接器将你的lib链接到目标exe时,它会查找这个pdb(在lib中有一个指向它的指针),并从该pdb中提取信息并将其放入exe的pdb中。

/Fd [name]是重命名pdb的选项 /ZI是使用包含Edit and Continue信息的pdb编译的选项。

所有链接的库和最终的taget exe或dll都需要/ ZI来启用编辑并继续。

我做了一个微小的testlib.lib和使用“DUMPBIN/all”来得到以下显示指针调试信息(这是一个很小的摘录):

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

我不明白这一点是有一个编译器设置中使用/ Fd [名称]默认为vc80.pdb并且在链接器设置中有一个pdb,默认为$(targetname)中指定的PDB。 pdb 我总是需要两个pdbs? – 2008-11-03 07:53:55

+1

是的,不幸的是,VC工具集的设置似乎是NP完整的。 http://sourceforge.net/projects/pdbdump有一个用于查看内部pdbs的工具。这和dumpbin可以帮助理解调试信息从工具链中流出的位置。 – 2008-11-04 16:37:48

4

如果你生活中可以没有“编辑并继续“,请尝试使用/Z7
我将它用于存储在源代码管理中的所有.lib文件。没有创建.pdb文件 - 调试信息存储在.lib文件中。

相关问题