2013-05-18 1 views
9

Я новичок в программировании на C++ и только что закончил создание простого калькулятора. Я решил поделиться им со своими друзьями и после нескольких попыток выяснил, как скомпилировать его в режиме выпуска. Однако даже в режиме выпуска он все еще зависит от MSVCP110D.dll. Мне было интересно, есть ли способ исправить это?Режим освобождения по-прежнему зависит от MSVCP110D.dll (C++ MSVS)

+0

Единственные внешние ресурсы я тянущие в этом #include «stdafx.h» #include #include #include Но я был под впечатлением, что в режиме выпуска это будет удалить все потребности для внешних ресурсов и будет полностью запущен внутри себя. –

+0

Вы не помогаете себе или нам, не объясняя, как вы * знаете *, что у вас есть зависимость от msvcp100d.dll. У вас ** есть зависимость от версии release на msvcp110.dll, она содержит код для iostream. Вам нужно скопировать его вместе с вашим .exe, msvcr110.dll. Или просто создайте с/MT в действительности, отлично для простых программ, которые не используют библиотеки DLL. –

+0

Вы пытались использовать Dependency Walker? – makc

ответ

6

1) MSVCP110D.dll - это runtime .dll для версии «Debug» библиотеки времени выполнения MS C. Таким образом, похоже, что ваш .exe, возможно, не был создан для «Release» правильно в конце концов.

2) Вот информация для "Visual Studio время выполнения Вторично распространяемого":

http://www.microsoft.com/en-us/download/details.aspx?id=30679

3) Здесь больше информации об этой конкретной проблемы:

http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/e128dff6-cef5-4a81-b6de-fcbcaa7a23bb

К сожалению msvcp100D.dll - это отладочная DLL, и она не включена в Microsoft Visual C++ Redistrutable pack возраст. Это из-за обычно отладочная версия не выпускается в отличие от разработчика. Разработчик установил его по умолчанию с помощью Visual Studio.

Вы можете скомпилировать свой проект в «Release», поэтому вся DLL, которая вам понадобится , будет включена в пакет Microsoft Visual C++ Redistrutable.

В противном случае вы можете сделать статическую ссылку всех библиотек (указать/MT в Release и/МПД в конфигурации отладки в опции компилятора): но лично я не рекомендую его becouse вы положили в исполняемом много информации (используется отладчиком), что замедлит ваше приложение.

+0

решил для меня. В последнее время возникла аналогичная проблема. Самое странное, что моя итоговая DLL зависела от MSVCR100.dll (без «D»), что было правильно, потому что я изменил/MDd на/MD, но также зависел от MSVCP100D.dll, что по той же причине не казалось правильным. После долгих исследований я обнаружил, что это зависит от определений препроцессора. Меняя _DEBUG на DEBUG, я решил проблему. – Nahum

3

Я предполагаю, что ваша проблема с зависимостью от отладочной версии DLL & не зависимость от самой DLL.

Это весьма вероятно, что вы делаете одну из этих 2-х вещей

  1. компилирования с /DDEBUG или /D_DEBUG ИЛИ

  2. ссылающихся с msvcpd.lib

При компиляции с /DDEBUG или /D_DEBUG и #include Входящий в один из стандартных заголовков C++, затем msvcpd.lib i s вытащил (with a #pragma(lib), что приводит к зависимости от msvcpd ***. dll.

msvcp (d) *. Dll - это версия стандартной библиотеки C++.

Если вместо этого ваша проблема связана с любой версией dll, то есть вы хотите статически ссылаться на библиотеку C++, вы можете скомпилировать свою программу с помощью _STATIC_CPPLIB.

+0

Прошу прощения, я невероятно новичок в этом. Но как бы я стал статически связывать DLL? Когда я скомпилировал его, я сменил тип компиляции с отладки на выпуск. Затем он создал папку выпуска с моими .exe и .cpp, содержащимися внутри. –

+0

@ user2396111 Щелкните правой кнопкой мыши по решению -> свойства, C/C++, Preprocessor-> Добавить _STATIC_CPPLIB в различные существующие определения препроцессора. Также, когда вы там, убедитесь, что DEBUG или _DEBUG уже определены. – user93353

+1

Это не так, также устаревший вариант в VS2012. C/C++, генерация кода, библиотека времени выполнения =/MT –

0

Вы используете какие-либо дополнительные библиотеки? Возможно, вы включили отладочную версию DLL-файла с вашим исполняемым.

Смежные вопросы