我正在使用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)库没有任何控制权。我不能/不想进入重新编译外部库。因此,需要在我的最后修复消息。
答案 0 :(得分:95)
添加以下内容作为附加链接器选项:
/ignore:4099
这是在Properties-> Linker->命令行
中答案 1 :(得分:47)
更新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
答案 2 :(得分:9)
(对于记录和线程在msdn论坛上消失之前) 您无法禁用警告(至少在VS2010下),因为它位于无法禁用的警告列表中(因此/ wd4099将无效),但您可以执行的操作是patch link.exe(通常C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ link.exe)将其从列表中删除。听起来像一个手提钻,我知道。它虽然有效。
例如,如果要删除4099的警告,请使用十六进制编辑器打开link.exe,转到第15A0行,其中读取03 10(小端为4099)并将其替换为FF 00(不存在)。 )
答案 3 :(得分:8)
为了别人的利益,我虽然把我所做的包括在内。
由于您无法让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放在一个目录中供项目使用。
因此对于“调试”配置,我编辑了:
属性 - >配置属性 - > C / C ++ - >输出文件 - >程序数据库文件名来自
$(IntDir)VC $(PlatformToolsetVersion).PDB
是以下值:
<强> $(OUTDIR)VC $(PlatformToolsetVersion)d $(项目名).PDB 强>
现在而不是在中间目录中的某个地方,.pdb文件被写入输出目录,其中.lib文件也被写入,最重要的是,它们以D + 项目名称的后缀命名。这意味着每个库项目生成一个项目.lib和一个特定于项目的.pdb。
我现在能够将我的所有.lib文件,调试.lib文件和调试.pdb文件复制到我的开发系统上的一个位置,以及在调试模式下使用该第三方库的项目,在调试模式下有它需要的pdb文件。
答案 4 :(得分:3)
我怀疑/忽略是VC6 link.exe选项。 对于VS2005和VS2008的链接器,没有可用的文档/忽略选项,但链接器看起来只是忽略“/ ignore:XXX”选项,没有错误也没有效果。
答案 5 :(得分:1)
PDB文件通常用于存储调试信息。引发此警告可能是因为链接目标对象文件时找不到文件vc80.pdb
。阅读LNK4099 here上的MSDN条目。
或者,您可以从项目属性&gt;关闭调试信息生成。链接器&gt;调试&gt;生成调试信息字段。
答案 6 :(得分:1)
编辑:不要使用vc80 / Visual Studio 2005,而是使用CGAL库的Visual Studio 2008 / vc90版本(可能是from here)。
你也可以用/ Z7编译,所以 pdb不需要使用,或 如果你,删除/ DEBUG链接器选项 没有对象的.pdb文件 你正在联系。
答案 7 :(得分:1)
你不能像@John Weldon那样禁用链接器警告4099。
您应该使用一些项目配置更改来重建库。您有几种选择: