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,

Я решил ту же проблему, как показано ниже:

  1. Выберите проект, щелкните правой кнопкой мыши и откройте страницу свойств.
  2. Выберите Свойства конфигурации.
  3. Выберите C/C++ из списка дерева.
  4. Выберите Генерация кода.
  5. Посмотрите на список свойств с левой стороны и увидите свойство Runtime Library.
  6. Выберите " Многопоточная отладка" вместо "Многопоточная 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"

Я не могу дать однозначного решения, но вот несколько полезных ссылок:

И, конечно, на MSDN гораздо больше, если вы перейдете по ссылкам.

Это одна из причин, по которой я статически связываю; большие EXE, но у меня никогда не было проблем с зависимостями, как это раньше. Вероятно, стоит вопрос сам по себе, хотя...

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