当C ++ / CLI项目使用/ ZI引用静态lib项目时警告LNK4075(编辑并继续)

时间:2014-02-23 08:14:40

标签: visual-studio-2012 c++-cli warnings edit-and-continue

我在Visual Studio 2012解决方案中有以下项目:

  • 原生(无/clr)静态lib项目,使用/ZI编译进行编辑并继续。
  • C ++ / CLI DLL项目,引用上面的静态库。

C ++ / CLI项目使用以下警告构建:

warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:LBR' specification

如果/ OPT:NOLBR被添加到C ++ / CLI项目的链接器选项中,则警告变为:

warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification

任何尝试更改C ++ / CLI项目的增量链接设置都不会更改警告(C ++ / CLI项目永远不会以递增方式链接)。

据我所知,我无法在C ++ / CLI项目中使用“编辑并继续”,因为这不受支持。实际上,在静态lib项目中将/ ZI更改为/ Zi(禁用编辑并继续)会消除警告,但我不能这样做 - 该lib的其他非CLR使用者需要使用“编辑并继续”。

如何在不禁用静态库中的编辑和继续的情况下摆脱此警告(并且希望不为静态库的本机和CLR用户维护单独的构建配置)?我的意思是,有没有办法要求链接器忽略嵌入在引用的静态库中的/EDITANDCONTINUE指令(与/NODEFAULTLIB可以忽略/DEFAULTLIB指令的方式相同)?

我创建了一个minimal VS solution来重现所描述的问题。

3 个答案:

答案 0 :(得分:15)

  

由于'/ OPT:LBR'规范

这是一个无意义的错误消息,该链接器选项仅对ARM二进制文件有效。这只是一个错误,使用/ OPT:NOLBR从中剔除它并获得真正的警告。

这是足够准确的,虽然它也没有赢得任何奖品,但是你在静态lib项目中要求编辑+继续支持,但这不适用于混合模式.NET程序集。未记录的/ IGNORE链接器选项可用于禁止显示警告消息,但这一消息由Chapell排名为"unignorable warning"

只要您不想更改静态lib项目,就必须忍受此警告。这完全是良性的。用/ Zi重新编译时,你不会得到它。

答案 1 :(得分:1)

没有别的办法
  • 在LIB中禁用“编辑并继续”
  • 创建一个单独的构建配置,用于“编辑并继续(/ ZI)”和“程序数据库(/ Zi)”

当然:我不知道有一个预定义的宏来确定/ ZI和/ Zi ...所以你需要定义自己的预处理器derective以便在这些配置之间进行远程处理...

答案 2 :(得分:0)

我遇到了同样的问题,发现唯一的解决方案是删除项目的.vcxproj和.sln文件并再次创建项目。 但是在同一项目的旧副本中我发现了一个更好的解决方案:我在projectname.vcxproj文件中更改了该行   简介真实 至   档案错误 和LNK4075警告消失了。 导致这些麻烦的是Visual Studio Profiler。