Microsoft Visual Studio: отладочная библиотека используется двоичным файлом, встроенным в режим выпуска - PullRequest
0 голосов
/ 21 июня 2011

В моем проекте Visual Studio 2008 активной конфигурацией является Release, и в настройках компилятора и компоновщика не включены символы отладки. Я строю exe-файл из командной строки:

devenv standalone_cpp.sln /build "RELEASE|WIN32"

Нет причин, по которым отладочная dll MSVCR90d.dll должна использоваться во время выполнения, но это происходит и дает сбой. Я не имею ни малейшего понятия, почему только DLL отладки поднята, а не dll MSVCR90.dll выпуска. Может кто-нибудь помочь, пожалуйста?

Я даже пытался собрать мой .exe в режиме отладки, надеясь, что он не потерпит крах, но все равно он аварийно завершится с той же ошибкой утверждения _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse). Пожалуйста, помогите, прежде чем я застрелюсь.

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Переустановите MSVS2008 с пакетом обновления 1. Кажется, ваша установка повреждена.

У меня такое было - это проявляется с таинственным поведением, подобным этому, хотя я также видел, как оно проявляется со странными «внутренними ошибками» при связывании больших DLL / EXE-файлов, а иногда и при компиляции очень больших проектов или очень больших переводческие единицы. По какой-то причине переустановка пакета обновления сработала.

Вот быстрая ссылка: http://www.microsoft.com/downloads/en/details.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E&displaylang=en

Другая мысль может заключаться в том, что вы сделали ссылку отладки в вашем исполняемом файле релиза. Даже несмотря на то, что вы создали решение для «RELEASE|WIN32», если какие-либо предварительные условия (связанные библиотеки) были версией отладки (либо на *.lib ссылались непосредственно, либо на путь отладки вместо пути выпуска), вы бы в итоге получится микс, и «отладочная» версия этой DLL попытается загрузить.

Тогда причина его сбоя, вероятно, заключается в том, что вы размещены в модуле «release» и удалены в модуле «debug» (или наоборот). Это не сработает, потому что распределители отличаются (так как «отладочные» версии выделяют дополнительное состояние для сторожей и других «проверок отладки»).

Помните, что MSVS2008 "переопределит" любые настройки проекта / решения с параметрами, найденными в Tools==>Options, даже если вы создаете из командной строки. Убедитесь, что для отсылки в ваших целях выпуска не указаны пути отладки. (Это было плохое решение Microsoft, поскольку оно приводит к файлам проектов / решений, которые не описывают то, что на самом деле происходит, они удалили эту "функцию" в MSVS2010.)

Вы также можете взглянуть на:

0 голосов
/ 25 июня 2011

Я думаю, что @Charley на деньги.

Скачать Зависимость Walker и посмотреть, что на самом деле вызывает загрузку отладочной DLL. Если то, что вы говорите в своем вопросе, верно, то, вероятно, это будет другая библиотека, от которой вы зависите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...