如何处理 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我给的仔细。
显然,忽略方法可能是最简单且问题较少的方法,尤其是当您使用大量第三方库时。
我有一个 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我给的仔细。
显然,忽略方法可能是最简单且问题较少的方法,尤其是当您使用大量第三方库时。