【问题标题】:How to ensure that the /EDITANDCONTINUE directive is not ignored如何确保不忽略 /EDITANDCONTINUE 指令
【发布时间】:2016-04-27 15:00:24
【问题描述】:

当我尝试在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

【问题讨论】:

  • 第一部分呢?我的意思是:'LIB.DLL' 中的 'file.cpp' 没有与启用的编辑和继续链接。
  • 啊...我也不确定为什么不是这样,或者在哪里可以做到这一点。据我所知,链接器设置/属性中没有此选项。只有全局 Tools > Options > Edit and Continue 复选框 AFAIK。
  • 我认为这些是您在项目中创建的文件?
  • LIB.DLL 是项目输出,file.cpp 在该项目中。
  • 我已经在这样做了。在此之前的警告说要这样做。

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


【解决方案1】:

查看命令行:

编译器命令行:“编辑并继续”实际上与 /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

【讨论】:

  • 如果将这些不兼容性与链接器错误一起记录下来会很有帮助。
【解决方案2】:

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

/安全:否

【讨论】:

  • 试过了。我仍然得到:Severity Code Description Project File Line Suppression State Error '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. Edit and Continue
【解决方案3】:

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:关闭

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,完成了上述所有步骤,但没有运气。

    我用的是 VS2017。

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

    • 在解决方案资源管理器中右键单击 *.cpp 文件
    • Properties > C/C++ > General > Debug Information Format = Program Database for Edit And Continue (/ZI)

    【讨论】:

      猜你喜欢
      • 2010-12-07
      • 1970-01-01
      • 2014-01-21
      • 2015-10-16
      • 2021-04-11
      • 2014-05-12
      • 2014-01-06
      • 2010-10-27
      • 1970-01-01
      相关资源
      最近更新 更多