我正在使用CGAL的库,在我的代码编译的链接阶段产生了很多这种形式的链接警告:
warning LNK4099: PDB 'vc80.pdb' was not found with 'gmp-vc80-mt-sgd.lib' or at 'vc80.pdb'; linking object as if no debug info
如何在Visual C++/Studio 2008下关闭此特定链接器警告?
请注意,我对我正在使用的外部(CGAL)库没有任何控制权.我不能/不想进入重新编译外部库.因此,需要在我的最后修复消息.
添加以下内容作为附加链接器选项:
/ignore:4099
这是在Properties-> Linker-> Command Line中
更新2018-10-16
据报道,从VS 2013开始,可以禁用此警告.请参阅@Mark Ransom的评论.
原始答案
您无法禁用该特定警告.
根据Geoff Chappell的说法,4099警告被视为过于重要而无法忽略,即使与/ wx结合使用(将警告视为错误并忽略其他情况下的指定警告)
以下是链接中的相关文字:
不是很不可靠的警告
对于某些警告编号,可以接受/ ignore选项中的规范,但不一定采取措施.如果在/ wx选项未激活时发生警告,则仍会显示警告消息,但如果/ wx选项处于活动状态,则忽略该警告.好像警告被认为足够重要,可以覆盖忽略它的企图,但如果用户对未标记的警告付出过高的代价则不会.
以下警告编号受到影响:
4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237
(对于记录以及线程在msdn论坛上消失之前)您无法禁用警告(至少在VS2010下),因为它位于无法禁用的警告列表中(因此/ wd4099将不起作用) ,但你可以做的是修补link.exe(通常是C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\bin\link.exe)从列表中删除它.听起来像一个手提钻,我知道.虽然它有效.
例如,如果要删除4099的警告,请使用十六进制编辑器打开link.exe,转到第15A0行,其中读取03 10(4099的小端)并将其替换为FF 00(不存在).
为了别人的利益,我虽然包括我所做的.
既然你无法让Visual Studio(在我的情况下是2010)忽略LNK4204警告,我的方法是给它它想要的东西:pdb文件.正如我在我的案例中使用开源库一样,我已经有了构建pdb文件的代码.
但是,默认是将所有PDF文件命名为同一个东西:在我的情况下为vc100.pdb.由于每个.lib都需要一个.pdb,这会产生一个问题,特别是如果你使用像ImageMagik这样的东西,它会创建大约20个静态.lib文件.您不能在一个目录中有20个lib文件(应用程序的链接器引用它们链接到库中),并且所有20个.pdb文件都被称为相同的东西.
我的解决方案是重建我的静态库文件,并配置VS2010以命名相对于PROJECT的.pdb文件.这样,每个.lib都会获得一个类似名称的.pdb,您可以将所有LIB和PDB放在一个目录中供项目使用.
所以对于"Debug"配置,我编辑了:
属性 - >配置属性 - > C/C++ - >输出文件 - >程序数据库文件名来自
$(IntDir)VC $(PlatformToolsetVersion).PDB
是以下值:
$(OUTDIR)VC $(PlatformToolsetVersion)d $(项目名).PDB
现在而不是在中间目录中的某个位置,.pdb文件被写入输出目录,其中.lib文件也被写入,最重要的是,它们以D + 项目名称的后缀命名.这意味着每个库项目都会生成一个项目.lib和一个特定于项目的.pdb.
我现在能够将我的所有版本.lib文件,我的调试.lib文件和调试.pdb文件复制到我的开发系统上的一个位置,并且在调试模式下使用该第三方库的项目具有pdb调试模式下需要的文件.