В этом случае у меня есть источник для приложения и DLL.
Когда оба компилируются без / NXCOMPAT, они отлично работают вместе. Но когда я компилирую оба с / NXCOMPAT, я получаю ошибку в глубине пространства ядра.
Если я скомпилирую dll с / NXCOMPAT и скомпилирую исполняемый файл без него, он также работает нормально. (Не удивительно, я полагаю, поскольку настройки DEP для исполняемого файла принудительно загружаются в DLL).
Ранее я видел segfault в MainCRTStartup (Примечание: не версия dll), после включения DEP, который был вызван другой опцией компоновщика. Тем не менее, в этом случае этот другой параметр компоновщика НЕ установлен, поэтому я знаю, что это не ответ.
У кого-нибудь есть идея, где мне искать причину?
Изменить: дальнейшая странность. Я все это время запускал в отладчике в VS 2008, но когда я попытался запустить его без подключенного отладчика, segfault исчезает. Я считаю это очень неудовлетворительным решением, так как я до сих пор не знаю Зачем это делал это.
Отредактируйте 2-е: также segfaults, работающие в отладчике в VS 2013 Express.
Не имея кода, мы должны догадаться по симптомам. Мой хрустальный шар говорит, что ты делаешь вещи внутри LoadLibrary
(то есть внутри DllMainCRTStartup
) которые запрещены. И есть очень длинный список вещей, которые запрещены в LoadLibrary
, включая загрузку любой другой DLL.
Обратите внимание, что ваши глобальные объекты создаются из DllMainCRTStartup
и, следовательно, должны уважать LoadLibrary
правила тоже.