我在Visual Studio 2012解决方案中有以下项目:
/clr
)静态lib项目,使用/ZI
编译进行编辑并继续。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来重现所描述的问题。
答案 0 :(得分:15)
由于'/ OPT:LBR'规范
这是一个无意义的错误消息,该链接器选项仅对ARM二进制文件有效。这只是一个错误,使用/ OPT:NOLBR从中剔除它并获得真正的警告。
这是足够准确的,虽然它也没有赢得任何奖品,但是你在静态lib项目中要求编辑+继续支持,但这不适用于混合模式.NET程序集。未记录的/ IGNORE链接器选项可用于禁止显示警告消息,但这一消息由Chapell排名为"unignorable warning"。
只要您不想更改静态lib项目,就必须忍受此警告。这完全是良性的。用/ Zi重新编译时,你不会得到它。
答案 1 :(得分:1)
没有别的办法
当然:我不知道有一个预定义的宏来确定/ ZI和/ Zi ...所以你需要定义自己的预处理器derective以便在这些配置之间进行远程处理...
答案 2 :(得分:0)
我遇到了同样的问题,发现唯一的解决方案是删除项目的.vcxproj和.sln文件并再次创建项目。 但是在同一项目的旧副本中我发现了一个更好的解决方案:我在projectname.vcxproj文件中更改了该行 简介真实 至 档案错误 和LNK4075警告消失了。 导致这些麻烦的是Visual Studio Profiler。