当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《VisualC++:如何禁用特定的链接器警告?》经验,为你挑选了4个好方法。

我正在使用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)库没有任何控制权.我不能/不想进入重新编译外部库.因此,需要在我的最后修复消息.



1> Aaron Saarel..:

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

 /ignore:4099

这是在Properties-> Linker-> Command Line中


奇怪,但它不起作用!我还在看错!
您可以使用/ ignore:4099作为链接器标志,但是有一个问题.不幸的是,微软决定将4099作为不可忽视的警告,所以你必须修补link.exe.听起来有点疯狂,但没有别的办法.更多细节在这里:http://www.bottledlight.com/docs/lnk4099.html我使用HxD作为十六进制编辑器,并按照该页面上的描述与VS10一起正常工作.订单仍然是4088,4099,4105.
谢天谢地,`/ ignore:4099`与VS12开箱即用.
我不认为/忽略存在.仍然列出了错误,并且MSDN中未记录/ ignore.我试图禁用4075"警告LNK4075:忽略'/ EDITANDCONTINUE'由于'/ INCREMENTAL:NO'规范."
不适用于警告4099 http://connect.microsoft.com/VisualStudio/feedback/details/176188/can-not-disable-warning-lnk4099
bottledlight.com/docs/lnk4099.html是404 :(
适用于VS 2015(该项目使用VS2013工具集,不确定是否有所作为)

2> John Weldon..:

更新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



3> Gurg Hackpof..:

(对于记录以及线程在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(不存在).


你应该寻找序列F8 0F 00 00 - 03 10 00 00 - 09 10 00 00(4088,4099,4105作为小端的32位双字).在amd64/link.exe中也是如此.

4> Minok..:

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

既然你无法让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调试模式下需要的文件.


如果您从源代码编译库,这是正确的答案.但是某些程序依赖于不包含.pdb文件的商业库,因此不能为它们生成.pdb文件.
推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有