2013-09-23 26 views
6

próbuję uruchomić program skompilowany w Visual Studio 2013. Jednakże pojawia się błądMSVCP110D.dll i Visual Studio 2013

The program can't start because MSVCP110D.dll is missing from 
your computer. Try reinstalling the program to fix this problem. 

To nie jest bardzo pomocne błąd. Jednak po jakimś Googlowaniu okazało się, że jest to (najwyraźniej) próba dynamicznego załadowania standardowej biblioteki c++, a aby obejść ten problem, muszę podać opcję /MT, a nie opcję /MD. Pozostawia mi to wiele pytań:

  1. Co dokładnie to robi?
  2. Jakie są korzyści z /MD w przeciwieństwie do /MT? Chodzi o to, że musi istnieć powód, że jest to domyślne opcje ...
  3. W jaki sposób chciałbym uzyskać wygląd .dll i uzyskanie Visual Studio do korzystania z niego? Pobrałem this, ale szczerze mówiąc nie wiem dokładnie, jak z niego korzystać.
  4. Co najważniejsze, jak mogę usunąć ten błąd i uruchomić program?

Kilka dodatkowych informacji: Kompiluję w trybie Release przy użyciu kompilacji x64.

+0

MSVCP110D.dll to biblioteka debugowa programu Visual Studio 2012 (chyba że 2013 r. Zachował te same biblioteki dll). – drescherjm

+0

Projekt został pierwotnie zbudowany z VS2012. Dlaczego wciąż jest poszukiwany? – MirroredFate

+1

Nie można znaleźć tej dll w redystrybucji, ponieważ biblioteki DLL debugowania nie są redystrybucyjne. – drescherjm

Odpowiedz

14

Problem polega na tym, że miksujesz różne wersje Visual Studio, używając Qt skompilowanego przy użyciu innego kompilatora. Pamiętaj, że każda wersja Visual Studio będzie miała własne środowisko uruchomieniowe/CRT. Pliki DLL Qt skompilowane z Visual Studio 2012 i będą zależne od środowiska wykonawczego Visual Studio 2012. Nie będą używać środowiska wykonawczego 2013.

Rozwiązaniem tego problemu jest przekompilowanie całego kodu i bibliotek zależnych/plików DLL za pomocą tego samego kompilatora.

Ostrzeżenie: Niektórzy użytkownicy będą próbować wystarczy zainstalować dynamiczne środowisko wykonawcze (lub skompilować biblioteki zależne CRT statyczne) z drugiej wersji programu Visual Studio, jednak to nie jest rozwiązanie tego problemu głównie dlatego, że każdy czas pracy ma swoje własne niezależne sterty. Posiadanie oddzielnych stert może i będzie prowadzić do przypadkowych awarii spowodowanych przez przydzielanie pamięci w jednej sterty, a następnie próbowanie uwolnienia jej w innej sterty. Ponieważ hałdy nie dzielą się informacjami o alokacjach lub zwolnieniach, prowadzi to do posiadania skorumpowanych hałd. Z mojego doświadczenia wynika, że ​​problem nie zawsze powoduje natychmiastową awarię. Awaria może, ale nie musi nastąpić przy następnej alokacji skorupy korupcyjnej, więc debugowanie tej sytuacji może być bardzo frustrujące.

+2

+1 za uwagę na temat sprzecznych stert. – texnic

Powiązane problemy