我正在使用 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

这是在属性 - >连接器 - >命令行

其他提示

<强>更新二○一八年十月一十六日

据报道,作为VS 2013的,此警告可被禁用。看到由@马克兰塞姆注释

<强>原始回答

您不能禁用特定的警告。

根据杰夫Chappell的的4099警告被处理,好象它忽略,甚至通过使用结合/ WX(其将处理警告作为错误和忽略在其他情况下规定的警告)太重要

下面是从链路相关文本:

  

不会相当忽视警告

     

有关一些警告编号,说明书中/忽略选项是   接受,但在没有必要采取行动。如果警告发生   而/ WX选项不可用,则警告消息仍   显示,但如果/ WX选项处于活动状态,那么警告   忽略。这是因为如果警告被认为是重要的,足以   在忽略它覆盖的尝试,但如果用户有放,太   上不可忽视的警告高价格。

     

下面的警告号受到影响:

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

(根据记录和线程之前对MSDN论坛消失) 你无法禁用警告(至少在VS2010),因为它是不能被禁用(所以/ wd4099将无法正常工作)的警告名单上,但你可以做的反而是补丁LINK.EXE(通常C:\ Program Files文件(x86)的\微软的Visual Studio 10.0 \ VC \ BIN \ LINK.EXE)从删除它说列表。听起来像一个电钻,我知道。它的工作原理虽然。

举例来说,如果你要删除的预警4099,用十六进制编辑器,转到线15A0读取03 10(小尾数为4099)开放LINK.EXE与FF 00(其中不存在取代它。 )

为他人的利益,我虽然我们包括我做了什么。

因为你不能得到Visual Studio(2010年在我的情况下)到忽略的LNK4204警告,我的办法是让它是什么它想要的东西:pdb文件。因为我是使用开放源图书馆在我的情况下,我的代码建设pdb文件。

但是,默认是对名称的所有PDF文件同样的事情:vc100.pdb在我的情况。因为你需要一个.pdb为每一个.lib,这产生了一个问题,特别是如果您使用的是什么样的ImageMagik,它创建了约20静态的。lib文件。你不能有20lib文件中的一个目录(其应用程序的连接引用中的链接,该图书馆)和所有20个。pdb的文件,叫做同样的事情。

我的解决方案是以去和重建我的静态图书馆的文件,并配置VS2010的名字。pdb文件关于该项目。这种方式,每个。lib得到同样的名字命名。pdb,你可以把所有的库和Pdb在一个目录的项目使用。

因此,对于"调试"配置,我的编辑:

性->构的特性->C/C++->输出文件>节目数据库文件的名字

$(IntDir)vc$(PlatformToolsetVersion).pdb

以下面的价值:

$(属性)vc$(PlatformToolsetVersion)D$(项目名称).pdb

现在,而不是某个地方在中间的目录。pdb文件写入输出的目录,其中。lib文件还是书面的,最重要的是,他们被命名为与缀D+项目名称.这意味着每个图书馆 项目 produduces一个项目。lib和项目具体化。pdb。

我现在能够复制了我所有的释放。lib文件,我的调试。lib文件和调试。pdb文件合并成一个地方,在我的发展系统,该项目使用的是3方图书馆在调试模式,已pdb需文件在调试模式。

我怀疑/忽略是VC6 LINK.EXE选项。 为VS2005 VS2008和的连接器有没有记录/忽略选项可供选择,但是链接程序会忽略该“/忽略:XXX”的选项,没有错误,没有影响

在PDB文件通常用于存储调试信息。因为链接的目标对象文件时,未找到该文件vc80.pdb这个警告可能引起的。阅读关于LNK4099 这里

可替换地,可以从项目属性>链接>调试关闭调试信息生成>生成调试信息字段。

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

链接器工具警告 LNK4099:

您也可以使用 /z7编译,因此如果您没有链接的对象的.pdb文件,则不需要使用PDB或删除 /调试链接器选项。

你不能禁止接头警告4099,说@约翰*韦尔登.

你应该重建图书馆与一些项目配置的变化。你有几种选择:

  • 保存PDB文件"调试"的信息是相同的文件夹中保存。lib文件。设置价值"$(属性)$(TargetName).pdb的"属性-->C/C++->输出的文件程序数据库的文件名
  • 保存"调试"的信息。lib文件。设置价值"C7兼容(/T7)"属性->C/C++事调试信息格式
  • 禁止一代"调试"的信息对于这个图书馆。删除的价值从属性-->C/C++事调试信息格式
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top