2013-09-23 18 views
6

Sto cercando di eseguire un programma ho compilato in Visual Studio 2013. Tuttavia, ottengo l'erroreMSVCP110D.dll e Visual Studio 2013

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

Questo non è un errore molto utile. Tuttavia, dopo un po 'su Google, ho scoperto che è (apparentemente) cercando di caricare dinamicamente una libreria standard c++ e che per ovviare a questo ho bisogno di specificare l'opzione /MT anziché l'opzione /MD. Questo mi lascia con una serie di domande:

  1. Che cosa esattamente sta facendo?
  2. Quali sono i vantaggi di /MD rispetto a /MT? Voglio dire, ci deve essere un motivo per cui sono le opzioni predefinite ...
  3. Come farei per ottenere l'aspetto di .dll e ottenere Visual Studio per usarlo? Ho scaricato this, ma sinceramente non so esattamente come usarlo.
  4. La cosa più importante, come ottenere che l'errore si interrompa e il mio programma venga eseguito?

Alcune informazioni aggiuntive: Sto compilando in modalità Release utilizzando una build x64.

+0

MSVCP110D.dll è una DLL di debug di Visual Studio 2012 (a meno che nel 2013 non siano state mantenute le stesse dll). – drescherjm

+0

Il progetto è stato originariamente creato con VS2012. Perché viene ancora cercato per ora? – MirroredFate

+1

Non si troverà questa dll in una ridistribuibile poiché le DLL di debug non sono ridistribuibili. – drescherjm

risposta

14

Il problema è che si stanno mescolando versioni diverse di Visual Studio utilizzando Qt che è stato compilato utilizzando un compilatore diverso. Ricorda che ogni versione di Visual Studio avrà il proprio runtime/CRT. Le DLL Qt che sono state compilate con Visual Studio 2012 e dipenderanno dal runtime di Visual Studio 2012. Non useranno il runtime 2013.

La soluzione a questo problema è ricompilare tutto il codice e le librerie/DLL dipendenti con lo stesso compilatore.

Attenzione: Alcuni utenti cercheranno di solo installare il runtime dinamico (o ricompilare librerie dipendenti con CRT statica) dal l'altra versione di Visual Studio tuttavia questa non è una soluzione a questo problema soprattutto perché ogni fase di esecuzione ha il suo proprio mucchio indipendente. L'esistenza di heap separati può causare e causerà arresti anomali casuali causati dall'assegnazione della memoria in un heap e dal tentativo di liberarlo in un heap differente. Poiché gli heap non condividono le informazioni su allocazioni o deallocations, ciò comporta l'accumulo di heap corrotti. Dalla mia esperienza, il problema non causa sempre un blocco istantaneo. L'arresto anomalo potrebbe o non potrebbe avvenire nella successiva allocazione dell'heap danneggiato, pertanto il debug di questa situazione può essere molto frustrante.

+2

+1 per osservazioni su heap in conflitto. – texnic

Problemi correlati