Как убедиться, что директива /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)