如何处理 Visual Studio 中的第 3 方 C++ 库 LNK4099 警告

How to deal with 3rd party c++ libraries LNK4099 Warning in VisualStudio

我有一个 Visual Studio c++ 项目,我在其中使用 linker 设置

/WX (TreatWarningsAsLinkerErrors=true)

在调试中,我使用 /Zi(调试数据库)进行编译,效果很好。

现在我有一个带有静态库的第 3 方 SDK,但没有 .pdb 文件。 一旦我在 Debug 中 link 这个文件,我就会得到

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 放在 3rd-party.lib 旁边并不能解决问题,因为该第 3 方库的源代码和 pdb 不可用, 所以 linker 仍然会抱怨。

为了摆脱这个 linker 警告,我有什么选择?

如果您使用 VS post 2010(所以 2012/2013/2015),最简单的方法是将 /ignore:4099 选项添加到 linker。应忽略此特定警告。当然,在 2012 年之前,这个警告被特别忽略了......它存在但是是一种 "yeah but we do not care" 警告。

更复杂的方式...如果你有 "energy/motivation/advanced user courage/Visual studio 2010 or before [2008/VC6/...]" 您实际上可以使用 lib 命令 lib /list obj.lib 提取 linking 期间使用的符号。 您将获得 lib 中包含的一些 obj,您可以使用 lib /extact ../path/to/my/obj 命令将其提取。 然后你必须使用 dumpbin /section:.debug$ 提取调试部分,在那里你会发现 pdb 问题......使用 /fd 命令你可以重新 link 正确的 pdb。 不知何故,这是很多工作。这是您可以在此处找到的内容的简短摘要:https://cldoten.wordpress.com/2009/07/01/vs2008-fixing-the-warning-pdb-vc90-pdb-not-found/ 按照link我给的仔细。

显然,忽略方法可能是最简单且问题较少的方法,尤其是当您使用大量第三方库时。