2013-05-18 13 views
9

Jestem nowy w programowaniu w C++ i właśnie skończyłem tworzyć prosty kalkulator. Postanowiłem podzielić się nim z przyjaciółmi i po kilku próbach zorientowałem się, jak skompilować go w trybie wydania. Jednak nawet w trybie zwolnienia nadal zależy od pliku MSVCP110D.dll. Zastanawiałem się, czy istnieje sposób, aby to naprawić?Tryb zwolnienia nadal zależy od MSVCP110D.dll (C++ MSVS)

+0

Jedyne środki zewnętrzne jestem pociągnięcie są #include „stdafx.h” #include #include #include Ale byłem pod wrażeniem, że w trybie zwolnienia byłoby to usunąć wszystkie potrzeby zewnętrznych zasobów i byłoby całkowicie uruchomione w sobie. –

+0

Nie pomagasz sobie, ani nam, nie wyjaśniając, w jaki sposób * wiesz *, że masz zależność od msvcp100d.dll. Ty ** masz ** zależność w wersji Release na msvcp110.dll, zawiera kod dla iostream. Musisz go również skopiować wraz z plikiem .exe, msvcr110.dll. Lub po prostu zbuduj z/MT w efekcie, dobrze dla prostych programów, które nie używają bibliotek DLL. –

+0

czy próbowałeś używać Dependency Walker? – makc

Odpowiedz

6

1) MSVCP110D.dll to plik .dll środowiska wykonawczego dla wersji "Debugowanie" biblioteki MS C Runtime Library. Wygląda na to, że twój .exe prawdopodobnie nie został zbudowany poprawnie dla "wydania".

2) Oto informacja dla "Visual Studio Runtime Redistributable":

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

3) Tu jest więcej informacji na temat tego konkretnego problemu:

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

Niestety msvcp100D.dll to biblioteka debugowania i nie jest dołączona do zestawu w pakiecie Microsoft Visual C++ Redistrutable wiek. Dzieje się tak, ponieważ normalna wersja debugowania nie jest dostępna dla innych niż deweloperów. Deweloper zainstalował go domyślnie w Visual Studio.

Możesz skompilować swój projekt w "Release", więc wszystkie pliki DLL, które będziesz potrzebować, będą dostępne w pakiecie Microsoft Visual C++ Redistrutable.

W przeciwnym razie można zrobić statycznego linku wszystkich bibliotek (określić/MT uwalnianie i/MTD w konfiguracji Debug do opcji kompilatora): ale osobiście nie polecam poniewaz można umieścić w pliku wykonywalnego wiele informacyjnego (używane przez debugger), które spowolni Twoją aplikację.

+0

rozwiązany dla mnie. Niedawno pojawił się podobny problem. Najdziwniejsze było to, że wynikowa biblioteka DLL była zależna od MSVCR100.dll (bez "D"), co było słuszne, ponieważ zmieniłem/MDd na/MD, ale także zależało od MSVCP100D.dll, co nie wydawało się właściwe z tego samego powodu. Po długim badaniu odkryłem, że zależy to od definicji preprocesora. Zmiana _DEBUG na DEBUG rozwiązała problem dla mnie. – Nahum

3

Zgaduję, twój problem jest z zależności od wersji debugowania biblioteki DLL &, a nie zależność od samej biblioteki dll.

Jest wysoce prawdopodobne, wykonując jedną z tych 2 rzeczy

  1. kompilacji z /DDEBUG lub /D_DEBUG LUB

  2. łączących z msvcpd.lib

Podczas kompilowania z /DDEBUG lub /D_DEBUG i #include jeden ze standardowych nagłówków C++, a następnie msvcpd.lib i s ściągnął (with a #pragma(lib), co prowadzi do zależności od msvcpd ***. dll.

msvcp (d) *. Dll jest biblioteką dll standardowej biblioteki C++.

Jeśli zamiast tego twój problem jest uzależniony od dowolnej wersji biblioteki DLL, tj. Chcesz statycznie połączyć się z biblioteką C++, możesz skompilować swój program pod numerem _STATIC_CPPLIB.

+0

Przykro mi, jestem niesamowicie nowy w tym. Ale w jaki sposób chciałbym statycznie powiązać bibliotekę DLL? Kiedy go skompilowałem, zmieniłem typ kompilacji z debugowania na wersję. Następnie utworzył folder Release z zawartymi plikami .exe i .cpp. –

+0

@ user2396111 Kliknij prawym przyciskiem myszy na rozwiązanie -> właściwości, C/C++, Preprocessor-> Dodaj _STATIC_CPPLIB do różnych istniejących definicji preprocesora. Również gdy tam jesteś, sprawdź, czy DEBUG lub _DEBUG są już zdefiniowane. – user93353

+1

To nie jest to, także przestarzała opcja w VS2012. C/C++, Generowanie kodu, Runtime Library =/MT –

0

Czy korzystasz z dodatkowych bibliotek? Może masz dołączoną wersję debugowania pliku dll z wykonalnym.

Powiązane problemy