MSVCR90D.dll не найден в режиме отладки с Visual C++ 2008
У меня проблема с Visual C++ 2008. Я установил opencv, создал новую программу и собираю ее без ошибок. Тем не менее, он жалуется на то, что не находит MSVCR90D.dll при отладке. В режиме релиза проблем нет вообще.
У меня есть MSVCR90D.dll в одной из папок Winsxs. Кто-нибудь знает обойти эту проблему? Это известная ошибка?
Gerard
11 ответов
Есть несколько потенциальных решений, описанных в этом сообщении на форуме. Посмотрите, поможет ли кто-нибудь из них.
Один намек оттуда:
Перейдите в%System Drive%\Windows\WinSxS и найдите каталог x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456
Если этого не существует, перейдите к настройке VS и убедитесь, что все библиотеки установлены под VC++.
И еще один:
У меня была та же проблема, но я исправил ее, отключив инкрементное связывание (Свойства проекта... Линкер... Общее... Включить инкрементное связывание: нет).
Подтверждение последнего:
Проекты, созданные на программном диске, жалуются на отсутствие MSVCR90D.dll. Проблема исчезнет, если вы отключите инкрементное связывание (и перестроите все, конечно).
Имея ту же проблему, я нашел сообщение, которое привело меня к отладочным DLL в установке VS9.0. Для установки по умолчанию они были в: C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugCRT
,
Есть три библиотеки DLL и файл манифеста. Вы можете добавить их в свой System32
каталог, добавьте каталог к вашему PATH
переменная окружения или скопируйте файлы в тот же каталог, что и ваш исполняемый файл при отладке.
Инкрементное связывание ускоряет ваши сборки (компоновщик перекомпоновывает только измененные библиотеки, а не перекомпоновывает весь проект). В противном случае это не влияет на результат сборки. Для большого проекта я бы не рекомендовал отключать инкрементные ссылки.
Была та же самая проблема, хотя другой проект VC9.0 преуспел. Поэтому я сравнил настройки обоих проектов. Принципиальное отличие заключалось в "Свойствах проекта" -> "Свойства конфигурации" -> "Инструмент манифеста" -> "Ввод и вывод" -> "Вставить манифест". Эта опция должна быть установлена в ДА.
Устранение проблем с DLL-библиотеками намного проще с Dependency Walker . Это позволяет вам профилировать ваше приложение, улавливая как DLL, загруженные при запуске, так и DLL, загруженные позже. Он будет выплевывать много сообщений, связанных с загрузкой DLL или с ошибкой их загрузки. Он также понимает SxS загрузку DLL.
Вы можете передать EXE в качестве аргумента Depends.EXE, и он будет профилировать это приложение. Это можно сочетать с большинством IDE. Например, в Visual Studio вы можете установить "Команду для отладки". По умолчанию это ваш собственный EXE. Измените его на зависящий от.EXE и установите аргументы команды на (как минимум) /pb your.debug.exe
,
Я решил ту же проблему, как показано ниже:
- Выберите проект, щелкните правой кнопкой мыши и откройте страницу свойств.
- Выберите Свойства конфигурации.
- Выберите C/C++ из списка дерева.
- Выберите Генерация кода.
- Посмотрите на список свойств с левой стороны и увидите свойство Runtime Library.
- Выберите " Многопоточная отладка" вместо "Многопоточная DLL".
Когда вы делаете это, ваш проект встраивает зависимые библиотеки и, таким образом, избегает проблем с зависимостями.
Примечание: я работал над проектом DLL, и у меня была такая проблема. После выполнения вышеуказанных шагов это сработало для моей ситуации.
Перекомпилируйте ваш проект в VC++ 2008, используя функцию File->New->Project From Existing Code. Это помогло мне, вероятно, это поможет вам. С уважением.
Я столкнулся с подобной проблемой, но ни одно из описанных решений не помогло мне.
Наконец, я сделал следующее, чтобы решить мою проблему:
Шаг 1. Следуйте совету пользователя @user176861.
Шаг 2: В свойствах проекта VC++ -> Свойства конфигурации -> Компоновщик -> Файл манифеста: В «Дополнительные зависимости манифеста» добавьте следующее:
type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'
После внесения вышеуказанного изменения я смог выполнить отладку.
У меня была проблема:
Не удалось загрузить файл или сборку 'AudioInterface, версия =1.0.3548.29920, культура = нейтральная, PublicKeyToken=null' или одна из ее зависимостей. Это приложение не удалось запустить из-за неправильной конфигурации приложения. Переустановка приложения может решить проблему. (Исключение из HRESULT: 0x800736B1)
AudioInterface был названием моего C++ проекта.
Переключившись в конфиг "Release", все заработало.
Я проследил за отсутствием файла манифеста вместе с моей DLL, который я также отслеживал, чтобы установить идентификатор сборки. (Свойства> Инструмент манифеста> Общие> Идентификатор сборки)
Я удалил эту настройку, и манифест упал в нужном месте, и все заработало.
Я попробовал все предложенные решения без какой-либо удачи. Я наконец обнаружил, что манифест отсутствует в "C:\WINDOWS\WinSxS\Manifests"
папка.
Найти папку в C:\WINDOWS\WinSxS
где находится ваша dll. Проверьте, есть ли манифест в C:\WINDOWS\WinSxS\Manifests
это соответствует имени папки вашего dll. Если манифест отсутствует, скопируйте правильный манифест с другого компьютера и вставьте его в папку манифеста. Имена файлов манифеста:
"X86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456.cat"
"X86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456.manifest"
Я не могу дать однозначного решения, но вот несколько полезных ссылок:
- Блог Дэвида Ленихана на WinSxS
- Параллельные сборки
- Устранение неполадок в изолированных приложениях C/C++ и параллельных сборках
- Последовательность поиска сборки
И, конечно, на MSDN гораздо больше, если вы перейдете по ссылкам.
Это одна из причин, по которой я статически связываю; большие EXE, но у меня никогда не было проблем с зависимостями, как это раньше. Вероятно, стоит вопрос сам по себе, хотя...