Как убедиться, что директива /EDITANDCONTINUE не игнорируется

Я получаю это сообщение, когда пытаюсь изменить и продолжить 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 ответа

Решение

Глядя на командные строки:

Командная строка компилятора: Edit и Continue на самом деле не совместимы с /Gm-, для этого требуется "Enable Minimal Rebuild" (/Gm).

Командная строка компоновщика: / OPT: REF, / SAFESEH, / OPT: ICF несовместимы с Edit и Continue и должны вызывать 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

Попробуйте отключить SAFESEH на дополнительной странице настроек компоновщика.

/ SafeSEH: НЕТ

Полный официальный ответ по делу 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

У меня была та же проблема, я сделал все шаги, описанные выше, но не повезло.

Я использую VS2017.

Помогло следующее: вы должны указать /ZI для каждого конкретного файла *.cpp в вашем проекте:

  • щелкните правой кнопкой мыши файл *.cpp в обозревателе решений.
  • Свойства> C/C++ > Общие> Формат отладочной информации = База данных программы для редактирования и продолжения (/ZI)
Другие вопросы по тегам