2008-10-31 43 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文件中。

相關問題