Eseguibile di Visual C ++ e mancante MSVCR100d.dll

So che questo è stato chiesto in altri posti e ho risposto, ma sto riscontrando problemi con MS Visual Studio 2010. Ho sviluppato un eseguibile in C ++ ma se eseguo la versione Release su una macchina che non ha la libreria di runtime VC ++ (ad esempio, msvcr100d.dll), viene visualizzato il messaggio di errore “Imansible avviare il programma perché msvcr100d.dll manca dal computer”.

Questo è strano per due motivi:

  • Perché sta tentando di collegarsi con la versione di debug del ridistribuibile?
  • Ho provato ad applicare questa correzione , impostando l’impostazione della libreria di runtime su / MT invece che su / MD (multi-threaded DLL), ma questo ha solo peggiorato il problema (se ho copiato manualmente msvcr100d.dll, non è stato ansible trovare msvcp110 .dll).

Come posso impacchettare la libreria di runtime con il mio eseguibile in modo che possa essere eseguito su macchine che non dispongono di MS VC 2010 o di ridistribuibili?

So che è considerato un rischio per la sicurezza includere una copia della DLL poiché non verrà mai aggiornata, ma il mio objective è solo quello di inviare questo eseguibile a pochi amici a breve termine.

Sicuramente non dovresti aver bisogno della versione di debug del CRT se stai compilando in modalità “release”. Si può dire che sono le versioni di debug delle DLL perché terminano con una d .

Più precisamente, la versione di debug non è ridistribuibile, quindi non è così semplice come “confezionarla” con il tuo eseguibile o comprimere quelle DLL.

Assicurati di compilare tutti i componenti dell’applicazione in modalità “rilascio” e di colbind la versione corretta del CRT e di tutte le altre librerie che utilizzi (ad esempio, MFC, ATL, ecc.).

Ovviamente, è necessario msvcr100.dll (notare l’assenza del suffisso d ) e alcuni altri se non sono già installati. Indirizza i tuoi amici per scaricare Visual C ++ 2010 Redistributable (o x64 ) o includilo automaticamente con l’applicazione creando un programma di installazione.

Per me il problema è apparso in questa situazione:

Ho installato VS2012 e non avevo più bisogno di VS2010. Volevo pulire il mio computer e anche rimuovere gli eseguibili di runtime VS2010, pensando che nessun altro programma avrebbe potuto usarlo. Quindi volevo testare la mia DLL collegandola ad un programma (chiamiamolo programma X). Ho ricevuto lo stesso messaggio di errore. Ho pensato che ho fatto qualcosa di sbagliato durante la compilazione della DLL. Tuttavia, il vero problema era che ho collegato la DLL al programma X, e il programma X è stato compilato in VS2010 con informazioni di debug. Ecco perché l’errore è stato gettato. Ho ricompilato il programma X in VS2012 e l’errore era scomparso.

Questo problema è stato spiegato in MSDN Library e, come ho capito, l’installazione del pacchetto ridistribuibile di Microsoft può essere d’aiuto.

Ma a volte può essere utilizzata la seguente soluzione (come soluzione per gli sviluppatori):

Nel tuo Visual Studio, apri le Project properties -> Configuration properties -> C/C++ -> Code generation e modifica l’opzione Runtime Library in /MT invece di /MD

Di solito l’applicazione che manca il dll indica quale versione è necessaria – se uno non funziona, basta scaricare Microsoft Visual C ++ 2010 x86 o x64 da questo link:

Per SO a 32 bit: qui

Per SO a 64 bit: qui

Ho avuto lo stesso errore.

Mi riferivo a una DLL VS2010 in un progetto VS2012.

Ho appena ricompilato la DLL su VS2012 e ora va tutto bene.

La versione di debug delle DLL della libreria vc ++ NON è pensata per essere ridistribuita!

Le versioni di debug di un’applicazione non sono ridistribuibili e le versioni di debug delle DLL della libreria di Visual C ++ non sono ridistribuibili. È ansible distribuire versioni di debug di applicazioni e DLL di Visual C ++ solo sugli altri computer, al solo scopo di eseguire il debug e testare le applicazioni su un computer su cui non è installato Visual Studio. Per ulteriori informazioni, vedere Ridistribuzione di file di Visual C ++.

Fornirò anche il collegamento: http://msdn.microsoft.com/en-us/library/aa985618.aspx