如何确保不忽略/ EDITANDCONTINUE指令

时间:2016-04-27 15:00:24

标签: visual-studio visual-studio-2015 edit-and-continue

当我尝试编辑并继续VSC15时收到此消息:

'file.cpp' in 'LIB.DLL' was not linked with Edit and Continue enabled. 
Ensure that /INCREMENTAL linking is enabled, and the /EDITANDCONTINUE directive is not ignored.

我已经确保/INCREMENTAL已启用,但无法弄清楚第二部分。

编译器命令行:

/Yu"stdfx.h" /GS /analyze- /W3 /Gy /Zc:wchar_t /ZI /Gm- /Od /Fd".\Debug\vc140.pdb" /Zc:inline /fp:fast /D "x86" /D "WIN32" /D "_WINDOWS" /D "DEBUG" /D "_UNICODE" /D "UNICODE" /D "_WINDLL" /errorReport:none /WX- /Zc:forScope /RTC1 /GR /Gd /Oy- /MTd /Fa".\Debug\" /EHsc /Fo".\Debug\" /Fp".\Debug\LIB.pch"

链接器命令行:

/OUT:".\Debug\LIB.dll" /MANIFEST:NO /NXCOMPAT /PDB:".\Debug\LIB.pdb" /DYNAMICBASE /DEF:"EXPORT.DEF" /IMPLIB:".\Debug\LIB.lib" /DLL /MACHINE:X86 /NODEFAULTLIB:"libc.lib" /OPT:REF /SAFESEH /INCREMENTAL /PGD:".\Debug\LIB.pgd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:".\Debug\LIB.dll.intermediate.manifest" /MAP /OPT:ICF

4 个答案:

答案 0 :(得分:6)

查看命令行:

编译器命令行:编辑并继续与/ Gm-实际上不兼容,它需要“启用最小重建”(/ Gm)。

链接器命令行: / OPT:REF,/ SAFESEH,/ OPT:ICF与编辑和继续不兼容,应该导致LNK4075。

如果您尝试清理构建LIB.dll,您应该看到警告,例如:

1>LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:REF' specification
1>ConsoleApplication1.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:ICF' specification

答案 1 :(得分:1)

尝试在链接器设置的高级页面上关闭SAFESEH。

/ SAFESEH:否

答案 2 :(得分:0)

vs2015案例的完整正式答案在https://blogs.msdn.microsoft.com/vcblog/2016/07/01/c-edit-and-continue-in-visual-studio-2015-update-3/此外,阅读此内容可能会有所帮助https://blogs.msdn.microsoft.com/vcblog/2013/10/29/the-visual-c-linker-best-practices-developer-iteration/

至于我的情况,我在链接命令行时看不到任何不兼容的标志,结果发现

  

/ LTCG

默认情况下,

处于启用状态,因此我必须在我的解决方案的每个项目中使用其他链接器选项手动将其转为

  

/ LTCG:OFF

答案 3 :(得分:0)

我有同样的问题,做了上面描述的所有步骤,但没有运气。

我使用VS2017。

下一步帮助:您必须为项目中的每个特定* .cpp文件指定/ ZI:

  • 右键单击解决方案资源管理器中的* .cpp文件
  • 属性> C / C ++>一般>调试信息格式= 用于编辑和继续的程序数据库(/ ZI)