如何确保不忽略 /EDITANDCONTINUE 指令
How to ensure that the /EDITANDCONTINUE directive is not ignored
我在 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
尝试在链接器设置的高级页面上关闭 SAFESEH。
/安全:否
查看命令行:
编译器命令行:“编辑并继续”与 /Gm- 并不真正兼容,它需要 "Enable Minimal Rebuild" (/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
vs2015案例的完整官方答案在这里https://blogs.msdn.microsoft.com/vcblog/2016/07/01/c-edit-and-continue-in-visual-studio-2015-update-3/ Also it may be helpful to read this one https://blogs.msdn.microsoft.com/vcblog/2013/10/29/the-visual-c-linker-best-practices-developer-iteration/
至于我的情况,我在链接命令行中没有看到任何不兼容的标志,结果
/LTCG
默认打开,所以我不得不在我的解决方案的每个项目中使用额外的链接器选项手动关闭它
/LTCG:OFF
我遇到了同样的问题,执行了上述所有步骤,但没有成功。
我用的是VS2017
接下来有帮助:您必须为项目中的每个特定 *.cpp 文件指定 /ZI:
- 在解决方案资源管理器中右键单击 *.cpp 文件
- 属性 > C/C++ > 常规 > 调试信息格式 = 用于编辑并继续的程序数据库 (/ZI)
我在 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
尝试在链接器设置的高级页面上关闭 SAFESEH。
/安全:否
查看命令行:
编译器命令行:“编辑并继续”与 /Gm- 并不真正兼容,它需要 "Enable Minimal Rebuild" (/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
vs2015案例的完整官方答案在这里https://blogs.msdn.microsoft.com/vcblog/2016/07/01/c-edit-and-continue-in-visual-studio-2015-update-3/ Also it may be helpful to read this one https://blogs.msdn.microsoft.com/vcblog/2013/10/29/the-visual-c-linker-best-practices-developer-iteration/
至于我的情况,我在链接命令行中没有看到任何不兼容的标志,结果
/LTCG
默认打开,所以我不得不在我的解决方案的每个项目中使用额外的链接器选项手动关闭它
/LTCG:OFF
我遇到了同样的问题,执行了上述所有步骤,但没有成功。
我用的是VS2017
接下来有帮助:您必须为项目中的每个特定 *.cpp 文件指定 /ZI:
- 在解决方案资源管理器中右键单击 *.cpp 文件
- 属性 > C/C++ > 常规 > 调试信息格式 = 用于编辑并继续的程序数据库 (/ZI)