visual-studio - Visual C++:如何禁用特定的鏈接器警告?




visual-c++ linker warnings cgal (8)

我懷疑/忽略是一個VC6 link.exe選項。 對於VS2005和VS2008的鏈接器,沒有可用的記錄/忽略選項,但鏈接器看起來只是忽略了“/ ignore:XXX”選項,沒有錯誤也沒有效果。

我使用的CGAL庫在我的代碼編譯的鏈接階段產生了很多這種形式的鏈接警告:

warning LNK4099: PDB 'vc80.pdb' was not found with 'gmp-vc80-mt-sgd.lib' or at 'vc80.pdb'; linking object as if no debug info

如何在Visual C ++ / Studio 2008下關閉此特定鏈接器警告?

請注意,我沒有任何控制我正在使用的外部(CGAL)庫。 我不能/不想進入重新編譯外部庫。 因此,需要在我的最後修復這些消息。


為了別人的利益,我雖然會包括我所做的。

既然你不能得到Visual Studio(2010在我的情況下)忽略LNK4204警告,我的方法是給它它想要的:pdb文件。 正如我在使用開源庫時,我已經有了構建pdb文件的代碼。

但是,默認情況下,將所有PDF文件命名為相同的東西:在我的情況下,vc100.pdb。 由於每個.lib都需要一個.pdb,因此會產生一個問題,尤其是在使用ImageMagik之類的情況下,它會創建大約20個靜態.lib文件。 你不能在一個目錄中有20個lib文件(你的應用程序的鏈接器引用鏈接庫中的鏈接),並且所有20個.pdb文件被稱為相同的東西。

我的解決方案是去重建我的靜態庫文件,並將VS2010配置為關於PROJECT命名.pdb文件。 這樣,每個.lib都會得到一個類似名為.pdb的文件,並且可以將所有LIB和PDB放在一個目錄中供您的項目使用。

因此,對於“調試”配置,我編輯了:

屬性 - >配置屬性 - > C / C ++ - >輸出文件 - >程序數據庫文件名

$(IntDir)VC $(PlatformToolsetVersion).PDB

為以下值:

$(OUTDIR)VC $(PlatformToolsetVersion)d $(項目名).PDB

現在,而不是在中間目錄中的某個位置,將.pdb文件寫入輸出目錄,其中.lib文件也正在寫入,並且最重要的是,它們的後綴名為D + 項目名稱 。 這意味著每個庫項目都會生成一個項目.lib和一個項目特定的.pdb。

我現在可以將我的發布.lib文件,調試.lib文件和調試.pdb文件全部複製到我的開發系統中的一個位置,並且在調試模式下使用該第三方庫的項目具有pdb在調試模式下它需要它的文件。


PDB文件通常用於存儲調試信息。 此警告是由於鏈接目標對象文件時未找到文件vc80.pdb而引起的。 在here閱讀LNK4099上的MSDN條目。

或者,可以從“項目屬性”>“鏈接器”>“調試”>“生成調試信息”字段中關閉調試信息生成。


添加以下內容作為附加鏈接器選項:

 /ignore:4099

這是屬性 - >連接器 - >命令行


您無法禁用該特定警告。

根據Geoff Chappell的說法,4099警告被視為忽略了太重要,即使與/ wx結合使用(將警告視為錯誤並在其他情況下忽略指定的警告)

以下是鏈接中的相關文字:

不相當不可忽視的警告

對於某些警告號碼,可以接受/忽略選項中的規範,但不一定對其起作用。 如果在/ wx選項未激活時發生警告,則警告消息仍然顯示,但​​如果/ wx選項處於活動狀態,則警告將被忽略。 這就好像警告被認為足夠重要,可以忽略忽略它的企圖,但如果用戶對未經註冊的警告投入了太高的價格,則不會。

以下警告號碼受到影響:

4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237

正如@約翰韋爾登所說的,你不能禁用鏈接器警告4099。

您應該重建一些項目配置更改的庫。 你有幾個選擇:

  • 用調試信息保存PDB文件是保存.lib文件的相同文件夾。 將值“$(OutDir)$(TargetName).pdb”設置為屬性 - > C / C ++ - >輸出文件 - 程序數據庫文件名
  • 將調試信息保存在.lib文件中。 將值“C7 compatible(/ Z7)”設置為Properties-> C / C ++ - > General-> Debug Information Format
  • 禁用該庫的生成調試信息。 從屬性 - > C / C ++ - >常規 - >調試信息格式中刪除值

(為了記錄,在線程在msdn論壇上消失之前)不能禁用警告(至少在VS2010下),因為它在不能被禁用的警告列表上(所以/ wd4099不起作用) ,但是您可以改為將patch.exe(通常為C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ link.exe)從該列表中刪除。 聽起來像一個手提鑽,我知道。 它雖然工作。

例如,如果要刪除4099的警告,請使用十六進制編輯器打開link.exe,然後轉到行15A0,該行的內容為03 10(小端為4099),並將其替換為FF 00(不存在)。


對於那些使用OpenGL SuperBible第6個源代碼示例尋找解決方案的解決方案,解決方案是使用Release而不是Debug進行構建。 所有項目都禁用發布版本中的增量鏈接選項。





visual-studio visual-c++ linker warnings cgal