我有一个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不可用,因此链接器将会还是抱怨。
为了摆脱这个链接器警告,我的选择是什么?
答案 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/
按照我给出的链接仔细。
显然,忽略方法可能是最简单且问题较少的,特别是如果你使用了很多第三方库。