Visual C ++:如何禁用特定的链接器警告?

我正在使用来自CGAL的库,在我的代码编译的链接阶段,会产生很多这种forms的链接警告:

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下closures此特定的链接器警告?

请注意,我没有任何控制我正在使用的外部(CGAL)库。 我不能/不想进入重新编译外部库。 因此,需要在我的最后解决消息。

添加以下作为附加链接器选项:

  /ignore:4099 

这是属性 – >连接器 – >命令行

您不能禁用该特定的警告。

根据Geoff Chappell的说法,4099的警告被认为是不重要的,即使与/ wx结合使用(在其他情况下将警告视为错误并忽略指定的警告)

以下是链接中的相关文字:

不是非常不可靠的警告

对于某些警告号码,可以接受/忽略选项中的说明,但不一定对其起作用。 如果/ wx选项未激活时发生警告,则警告消息仍然显示,但如果/ wx选项处于活动状态,则警告将被忽略。 这就好像警告被认为足够重要,可以忽略忽略它的企图,但是如果用户对未经注册的警告投入了太高的价格,就不会这么做。

以下警告号码受到影响:

 4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237 

(对于logging,并在msdn论坛上线程消失之前)您不能禁用警告(至less在VS2010下),因为它是在不能被禁用的警告列表(因此/ wd4099将不起作用) ,但你可以做的是修补程序link.exe(通常是C:\ Program Files文件(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ link.exe)将其从列表中删除。 听起来像一个手提钻,我知道。 它虽然工作。

例如,如果要删除4099的警告,请使用hex编辑器打开link.exe,并转到行15A0,该行的内容为03 10(小端为4099),并将其replace为FF 00(不存在)。

为了别人的利益,我虽然会包括我所做的。

既然你不能得到Visual Studio(2010在我的情况下)忽略LNK4204警告,我的方法是给它它想要的:pdb文件。 正如我在我的情况下使用开源库,我已经build立了pdb文件的代码。

但是,默认是命名所有的PDF文件相同的东西:vc100.pdb在我的情况。 因为每个.lib都需要一个.pdb,所以会产生一个问题,尤其是在使用ImageMagik之类的东西时,它会创build大约20个静态.lib文件。 你不能在一个目录中有20个lib文件(你的应用程序的链接器引用链接到库中的链接),并把所有20个.pdb文件称为同一个目录。

我的解决scheme是去和重build我的静态库文件,并configurationVS2010相对于PROJECT命名.pdb文件。 这样,每个.lib都会得到一个类似名称的.pdb,并且可以将所有LIB和PDB放在一个目录中供项目使用。

所以对于“debugging”configuration,我编辑了:

属性 – >configuration属性 – > C / C ++ – >输出文件 – >程序数据库文件名

$(IntDir)VC $(PlatformToolsetVersion).PDB

具体如下:

$(OUTDIR)VC $(PlatformToolsetVersion)d $(项目名).PDB

现在,而不是中间目录中的某个位置,.pdb文件被写入到输出目录,在那里.lib文件也被写入,最重要的是,它们被命名为后缀为D + 项目名称 。 这意味着每个库项目都生成一个项目.lib和一个项目特定的.pdb。

我现在能够将我的发行版.lib文件,debugging.lib文件和debugging.pdb文件复制到我的开发系统中的一个位置,并且在debugging模式下使用该第三方库的项目具有pdb在debugging模式下它需要的文件。

我怀疑/忽略是一个VC6 link.exe选项。 对于VS2005和VS2008的链接器没有logging/忽略选项可用,但链接器看起来只是忽略“/忽略:XXX”选项,没有错误,没有影响。

PDB文件通常用于存储debugging信息。 此警告是由于在链接目标对象文件时未find文件vc80.pdb而导致的。 在这里阅读LNK4099上的MSDN条目。

或者,可以从“项目属性”>“链接器”>“debugging”>“生成debugging信息”字段中closuresdebugging信息生成。

编辑:不要使用vc80 / Visual Studio 2005,但Visual Studio 2008 / vc90版本的CGAL库(也许从 这里 )。

链接器工具警告LNK4099 :

你也可以使用/ Z7进行编译,所以不需要使用pdb,或者如果你没有链接的对象的.pdb文件,则可以删除/ DEBUG链接器选项。

正如@约翰·韦尔登所说,你不能禁用链接器警告4099。

您应该重build一些项目configuration更改的库。 你有几个select:

  • 用debugging信息保存PDB文件是保存.lib文件的同一文件夹。 将值“$(OutDir)$(TargetName).pdb”设置为属性 – > C / C ++ – >输出文件 – 程序数据库文件名
  • 将debugging信息保存在.lib文件中。 设置值“C7 compatible(/ Z7)”为Properties-> C / C ++ – > General-> Debug Information Format
  • 禁用该库的生成debugging信息。 从属性 – > C / C ++ – >常规 – >debugging信息格式中删除值