Приложение VS2008 C ++ не запускается в режиме отладки: не удалось запустить это приложение, так как MSVCR90.dll не найден - PullRequest
2 голосов
/ 05 июня 2009

У меня есть только что созданное минимальное приложение, использующее VS 2008 SP1 на Vista x64. Это консольное приложение, созданное с помощью мастера, без MFC или чего-либо еще, я создаю его в 64-битной версии.

Когда я запускаю отладочную исполняемую программу в моем окне разработки, нажимая F5 в Visual Studio 2008, я получаю эту ошибку:

TestApp.exe - Unable To Locate Component

This application has failed to start because MSVCR90.dll was not found. 
Re-installing the application may fix this problem. 

OK   

Я не получаю эту ошибку при запуске exe-релиза, она работает как положено.

Эта проблема возникла, когда я добавил некоторые включаемые зависимости от iostream и fstream и начал вызывать некоторые вызовы winsock API.

Есть предложения?

ОБНОВЛЕНИЕ: я скопировал msvcr90.dll (не msvcrd90.dll) в правильную папку, и теперь я получаю другую ошибку:


Библиотека времени выполнения Microsoft Visual C ++

Ошибка выполнения!

Программа: [snip] ...

R6034

Приложение попыталось загрузить библиотеку времени выполнения C неправильно. Пожалуйста, обратитесь в службу поддержки приложения для получения дополнительной информации.


OK

  • Alex

Ответы [ 7 ]

5 голосов
/ 05 июня 2009

Ваше приложение использует библиотеку DLL CRT. Машина, на которой вы хотите его запустить, требует установки dll-файлов отладочной CRT (что является проблемой в заднице ...). Я думаю, что лучшее решение состоит в том, чтобы изменить параметры компиляции для использования статической связанной среды выполнения CRT (это означает, что среда выполнения связана с вашим приложением, а не с использованием версии DLL).

В visual studio перейдите в раздел «Свойства» для своего проекта, затем выберите «Свойства конфигурации» / «C ++» и «Генерация кода» и измените «Библиотека времени выполнения» с «Многопоточная отладочная DLL» на «Многопоточная отладка».

Возможно, вы захотите сделать то же самое и для сборки выпуска, поскольку некоторые версии ОС не будут поставляться с предустановленными библиотеками CRT выпуска V9, или вы можете включить выпуск CRT dll v9 как часть вашей установки.

0 голосов
/ 11 августа 2009

Я могу подтвердить эту проблему: позволяя Visual Studio 2008 создать проект (консольное приложение Visual C ++ / Win32) и нажатие F5 отобразит эту ошибку.

Существует простое решение:

Отключить добавочную связь. HOWTO: открыть страницу свойств для проекта. Установить конфигурацию Свойства / Linker / General / Включить инкрементную ссылку на «Нет» (INCREMENTAL: NO)»

.
0 голосов
/ 13 июля 2009

см. Ссылку

http://www.insidercoding.com/post/2008/07/21/Debugging-issues-with-MSVCR90DLL.aspx

Необходимо (только для режима отладки) игнорировать на вкладке ввода ссылок MSVCRT; MSVCR90; как вы хотите использовать отладочную версию CRT.

0 голосов
/ 30 июня 2009

Еще раз спасибо за всю помощь с этим. Оказывается, я просто ошибся и не заметил, что библиотека, которую я использовал, была статически связана с другой версией среды выполнения MSVC. Это вызвало конец проблем.

0 голосов
/ 05 июня 2009

Вы связываете свою программу режима отладки с библиотекой режима выпуска? Вы упоминаете эту ошибку в комментарии:

Error 13 error LNK2005: memmove already defined in LIBCMTD.lib(memcpy.obj) MSVCRT.lib DataEngineSocketsAPI

Для меня это выглядит так: у вас есть библиотека с именем DataEngineSocketsAPI, которая ссылается на MSVCRT.lib, который определяет memmove (). Но ваш exe-файл ссылается на libcmtd.lib, который также определяет другую (режим отладки) версию memmove ().

Сторонние (например, ваши собственные) библиотеки также должны иметь версии для отладки и выпуска, и вы должны использовать ту, которая соответствует режиму, для которого вы создаете свой exe.

0 голосов
/ 05 июня 2009

Как вы запускаете выпуск exe (Ctrl + F5 в IDE)? Вам следует установить для Runtime Library то же самое, что и для выпуска exe.

0 голосов
/ 05 июня 2009

Debug exe связан с заголовками для библиотеки времени выполнения отладки MSVCR90D.dll. Вы должны убедиться, что DLL находится на пути. Статическое связывание является, как говорит Шейн, жизнеспособным вариантом, но типичным решением является развертывание зависимых dll с exe-файлом. Статическое связывание всего приводит к раздутым exe-файлам и множеству дублированных копий библиотек времени выполнения.

Видя ваши изменения, проблема, безусловно, в msvcr90d.dll, но ее необходимо правильно развернуть в папке WinSXS. Возможно, вы сможете переустановить пакет обновления для VS 2008 и переустановить его.

...