视觉C++:如何禁用特定链接器警告?
-
20-08-2019 - |
题
我正在使用 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 这里。
可替换地,可以从项目属性>链接>调试关闭调试信息生成>生成调试信息字段。
你不能禁止接头警告4099,说@约翰*韦尔登.
你应该重建图书馆与一些项目配置的变化。你有几种选择:
- 保存PDB文件"调试"的信息是相同的文件夹中保存。lib文件。设置价值"$(属性)$(TargetName).pdb的"属性-->C/C++->输出的文件程序数据库的文件名
- 保存"调试"的信息。lib文件。设置价值"C7兼容(/T7)"属性->C/C++事调试信息格式
- 禁止一代"调试"的信息对于这个图书馆。删除的价值从属性-->C/C++事调试信息格式