2008-10-20 8 views
17

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

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

Джерард

+1

У меня такая же проблема. По состоянию на 18-07-2009 ни один из заданных ответов действительно не отвечает на вопрос. Вот почему я снова спросил его здесь http://stackoverflow.com/questions/1150464 – 2009-07-19 18:10:04

+0

Возможный дубликат [msvcr90d.dll не найден в режиме отладки] (http://stackoverflow.com/questions/1150464/msvcr90d-dll-not -found-in-debug-mode) – 2015-07-26 08:01:35

ответ

9

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

Один намек есть:

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

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

И еще один:

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

Подтверждая последний:

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

+1

Большое спасибо за вашу помощь. Это сработало!! Однако могу ли я возникнуть проблема с установкой инкрементной привязки? Что это меняет? Еще раз спасибо – 2008-10-20 23:18:34

+0

От MSDN: инкрементно связанная программа функционально эквивалентна программе, которая не связана с ним. Это важный момент. Подробнее читайте на http://msdn.microsoft.com/en-us/library/4khtbfyf(VS.80).aspx. – 2008-10-21 08:29:02

+0

Отключил инкрементную привязку (OGRE3D), и она сработала. Спасибо +1 – 2009-08-13 15:12:48

0

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

2

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

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

4

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

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

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

0

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

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

AudioInterface было именем моего проекта на C++.

Переключение на конфигурацию «Отпустить», все сработало.

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

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

3

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

0

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

1

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

1

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

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

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

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