如何处理第三方c++;VisualStudio中的库LNK4099警告 我有一个VisualStudioC++项目,我使用链接器设置< /P> /WX (TreatWarningsAsLinkerErrors=true)

如何处理第三方c++;VisualStudio中的库LNK4099警告 我有一个VisualStudioC++项目,我使用链接器设置< /P> /WX (TreatWarningsAsLinkerErrors=true),c++,visual-studio,static-linking,debug-symbols,C++,Visual Studio,Static Linking,Debug Symbols,在Debug中,我使用/Zi(Debug数据库)进行编译,它工作得很好 现在我有了一个第三方SDK,它带有一个静态库,但没有.pdb文件。 只要我在调试中链接这个文件,我就会 LNK4099: 3rd-party.lib(3rd-party.obj) : warning LNK4099: PDB "vc90.pdb" was not found "3rd-party.lib(3rd-party.obj)" or with "C:\OutDir\vc90.pdb" 请注意,此消息具有误导性,因为

在Debug中,我使用/Zi(Debug数据库)进行编译,它工作得很好

现在我有了一个第三方SDK,它带有一个静态库,但没有.pdb文件。 只要我在调试中链接这个文件,我就会

LNK4099: 3rd-party.lib(3rd-party.obj) : warning LNK4099: PDB "vc90.pdb" was not found "3rd-party.lib(3rd-party.obj)" or with "C:\OutDir\vc90.pdb"
请注意,此消息具有误导性,因为将vc90.pdb放在第三方lib旁边并不能解决问题,因为该第三方lib的源代码和pdb不可用,因此链接器仍会投诉


为了消除此链接器警告,我的选项是什么?

如果使用VS post 2010(2012/2013/2015),最简单的方法是在链接器中添加/ignore:4099选项。应忽略此特定警告。确保在2012年之前,此警告被明确忽略。。。它确实存在,但却是一种“是的,但我们不在乎”的警告

更复杂的方式。。。如果您拥有“能量/动力/高级用户勇气/Visual studio 2010或之前的[2008/VC6/…]” 实际上,您可以使用lib命令
lib/list obj.lib
提取链接期间使用的符号。 您将获得lib中包含的obj的lit,您可以使用
lib/extact../path/to/my/obj
命令提取它。 然后,您必须使用
dumpbin/section:.debug$
提取调试部分,在那里您将发现pdb问题。。。使用/fd命令可以正确地重新链接pdb。 不知何故,这是一项艰巨的工作。以下是您可以在此处找到的内容的简短摘要: 请仔细阅读我提供的链接


显然,ignore方法可能是最简单、问题较少的方法,尤其是在使用大量第三方库的情况下。

/ignore:4099确实有效。缺点是,实际上我不希望LNK4099被完全抑制,但这总比什么都不抑制好。@Gibet:请把你的评论变成一个答案。这是一个很好的回应,将在未来帮助人们。我接受这个答案,因为/ignore:4099有效。我没有测试提取符号,我不确定当我没有pdb时这是否可以修复。可能仍然值得一试。我在使用VS2019时遇到了这个问题。我在x64版本上获得LNK4099,在Win32版本上获得LNK4204。在Linker:命令行部分的附加选项中添加了/ignore:4099和/ignore:4204,但我仍然收到警告