Странное различие между Debug и Release, приводящее к неразрешенной _except_handler3, или Почему, о, почему я не знаю о libcmtd?

Приложение для Windows, над которым я работал, должно быть доставлено без использования CRT. Есть несколько хороших статей, описывающих руководящие принципы и преимущества этого (ни одной из которых я не смог найти при написании этого вопроса - извините) . В противном случае явно не используются символы CRT, все дело в конфигурации компоновщика и компилятора. Мои конфигурации Release и Debug теперь почти идентичны, и обе указывают /NODEFAULTLIB:"LIBCMT" только diffrence - флаг времени выполнения /MT (в версии) против /MTd (в Debug) - это требуется, поскольку я использую __try/__except синтаксис для SEHи поэтому единственная необходимая функция _except_handler3(), Тем не менее, версия Debug успешно собирается, а версия Release терпит неудачу с Unresolved Symbol _except_handler3 ошибка связи. При принудительной компиляции версии Release /MTd - эта проблема решена.

Как это возможно? который .lib содержит экспорт _except_handler3? и как я могу решить это?

1 ответ

Для приложения без CRT см.: http://blog.kalmbach-software.de/2008/02/02/smallest-application-size-for-win32-console-application/

Но если вы хотите использовать __try / __except, вам нужно использовать CRT; или вам нужно написать свой собственный "_except_handler3".

Смотрите также: _except_handler3

Также у вас есть источник CRT, и вы можете взглянуть на источник, чтобы увидеть, что он делает! См.: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\crt\src

Другие вопросы по тегам