MSVCR90D.dll не найден в режиме отладки с Visual C ++ 2008 - PullRequest
17 голосов
/ 20 октября 2008

У меня проблема с Visual C ++ 2008. Я установил opencv, создал новую программу и собираю ее без ошибок. Тем не менее, он жалуется на то, что не находит MSVCR90D.dll при отладке. В режиме релиза проблем нет вообще.

У меня есть MSVCR90D.dll в одной из папок Winsxs. Кто-нибудь знает обойти эту проблему? Это известная ошибка?

Gerard

Ответы [ 10 ]

9 голосов
/ 20 октября 2008

Существует несколько потенциальных решений, описанных в этом форуме . Посмотрите, поможет ли кто-нибудь из них.

Один намек оттуда:

Перейти к% System Drive% \ Windows \ WinSxS и искать каталог x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456

Если этого не существует, перейдите к VS настройте и убедитесь, что у вас есть все библиотеки, установленные под VC ++.

И еще один:

У меня была такая же проблема, но я ее исправил отключив инкрементное связывание (Свойства проекта ... Линкер ... Общие ... Включить инкрементное связывание: Нет).

Подтверждение последнего:

Проекты, основанные на программном обеспечении диск жалуются на пропавших без вести MSVCR90D.dll. Проблема уходит если вы отключите добавочную связь (и перестроить все, конечно).

4 голосов
/ 29 марта 2009

Имея ту же проблему, я нашел сообщение, которое привело меня к отладочным библиотекам DLL в установке VS9.0. Для установки по умолчанию они были в: C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugCRT.

Существует три библиотеки DLL и файл манифеста. Вы можете добавить их в каталог System32, добавить каталог в переменную среды PATH или скопировать файлы в тот же каталог, что и ваш исполняемый файл при отладке.

Инкрементное связывание ускоряет ваши сборки (компоновщик повторно связывает библиотеки, которые были изменены, вместо того, чтобы заново связывать весь проект). В противном случае это не влияет на вывод сборки. Для большого проекта я бы не рекомендовал отключать инкрементные ссылки.

3 голосов
/ 13 января 2010

Была такая же проблема, хотя другой проект VC9.0 работал хорошо. Поэтому я сравнил настройки обоих проектов. Принципиальное отличие заключалось в «Свойствах проекта» -> «Свойства конфигурации» -> «Инструмент манифеста» -> «Ввод и вывод» -> «Вставить манифест». Эта опция должна быть установлена ​​в ДА.

2 голосов
/ 21 октября 2008

Устранение проблем с DLL-библиотеками намного проще с Dependency Walker. Это позволяет вам профилировать ваше приложение, улавливая как библиотеки DLL, загруженные при запуске, так и библиотеки DLL, загруженные позже. Он будет выплевывать много сообщений, связанных с загрузкой DLL или с ошибкой их загрузки. Он также понимает SxS-загрузку DLL.

Вы можете передать EXE в качестве аргумента Depends.EXE, и он будет профилировать это приложение. Это можно сочетать с большинством IDE. Например, в Visual Studio вы можете установить «Команду для отладки». По умолчанию это ваш собственный EXE. Измените его на зависящий от.EXE и установите аргументы команды (по крайней мере) /pb your.debug.exe.

1 голос
/ 05 августа 2014

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

  1. Выберите проект, щелкните правой кнопкой мыши и откройте страницу свойств.
  2. Выберите свойства конфигурации.
  3. Выберите C / C ++ из списка дерева.
  4. Выберите генерацию кода.
  5. Посмотрите на список свойств с левой стороны и увидите свойство Runtime Library .
  6. Выберите Многопоточная отладка вместо многопоточной DLL.

Когда вы делаете это, ваш проект встраивает зависимые библиотеки и, следовательно, избегает проблем с зависимостями.

Примечание. Я работал над проектом DLL и столкнулся с этой проблемой. После выполнения вышеуказанных шагов это сработало для моей ситуации.

1 голос
/ 11 июля 2010

Перекомпилируйте ваш проект в VC ++ 2008, используя функцию File-> New-> Project From Existing Code. Это помогло мне, вероятно, это поможет вам. С уважением.

0 голосов
/ 01 июля 2010

Я перепробовал все предложенные решения без какой-либо удачи. Наконец я обнаружил, что манифест отсутствует в папке "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"

0 голосов
/ 22 сентября 2009

У меня была проблема:

Не удалось загрузить файл или сборку 'AudioInterface, версия = 1.0.3548.29920, культура = нейтральная, PublicKeyToken = null' или одна из ее зависимостей. Это приложение не удалось запустить из-за неправильной конфигурации приложения. Переустановка приложения может решить проблему. (Исключение из HRESULT: 0x800736B1)

AudioInterface - это название моего проекта на C ++.

Переключение в конфиг "Release", все заработало.

Я проследил за отсутствием файла манифеста вместе с моей DLL, который я также отслеживал, установив Идентификатор сборки. (Свойства> Инструмент манифеста> Общие> Идентификатор сборки)

Я удалил эту настройку, и манифест упал в нужном месте, и все заработало.

0 голосов
/ 19 июля 2009

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

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

0 голосов
/ 20 октября 2008

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

...