如何处理第三方c ++库LNK4099 VisualStudio中的警告

时间:2016-06-22 14:40:32

标签: c++ visual-studio static-linking debug-symbols

我有一个Visual Studio c ++项目,我使用链接器设置

/WX (TreatWarningsAsLinkerErrors=true)

在Debug中,我用/ Zi(调试数据库)编译,工作正常。

现在我有一个第三方SDK,它带有一个静态库,但没有.pdb文件。 一旦我在Debug中链接这个文件,我就得到了

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旁边无法解决问题,因为该第三方库的源代码和pdb不可用,因此链接器将会还是抱怨。

为了摆脱这个链接器警告,我的选择是什么?

1 个答案:

答案 0 :(得分:3)

如果您使用VS post 2010(2012 / 2013/2015),最简单的方法是将/ ignore:4099选项添加到链接器。应该忽略这个特定的警告。当然,在2012年之前,这个警告被特别忽略了......它存在但是是一种"是的但是我们并不关心"警告。

更复杂的方式......如果您拥有"能量/动力/高级用户勇气/ Visual Studio 2010或之前[2008 / VC6 /...]" 您实际上可以使用lib命令lib /list obj.lib提取链接期间使用的符号。 您将获得lib中包含的obj,您可以使用lib /extact ../path/to/my/obj命令进行提取。 那么你必须使用dumpbin /section:.debug$提取调试部分,然后你会发现pdb问题...使用/ fd命令你可以正确地重新链接pdb。 这在某种程度上是很多工作。这是您可以在此处找到的内容的简短摘要:https://cldoten.wordpress.com/2009/07/01/vs2008-fixing-the-warning-pdb-vc90-pdb-not-found/ 按照我给出的链接仔细。

显然,忽略方法可能是最简单且问题较少的,特别是如果你使用了很多第三方库。