2014-12-01 8 views
7

So che ci sono alcune domande su come includere msvcr120.dll/msvcp120.dll nel progetto.Sbarazzarsi della dipendenza msvcr120.dll/msvcp120.dll nella mia applicazione di rilascio (VC++ 2013)

Ma voglio eliminare questa dipendenza. Compilo il programma in versione Release, in Visual Studio 2013. Io non dipendo da alcun comando VS-specifici (#pragma ecc) o intestazioni precompilate ecc

voglio compilarlo a uno exe ​​rilascio singolo e fornitelo all'utente SENZA chiedergli di installare VC++ Redistributes per VS (l'utente lavorerà su Windows 7, Windows 8, forse Windows XP).

È possibile? Se é cosi, come?

+1

È necessario utilizzare il runtime statico se non si desidera ridistribuirlo. – drescherjm

+0

Devo usare l'opzione/MT allora? E lo stesso per qualsiasi .lib compilo e includo nel progetto? Cosa con i file dll di terze parti? – PolGraphic

+1

'# pragma' e la maggior parte dei comandi specifici di VS non dipendono da msvcr. Avere _globals_ dipende dal runtime C++. È anche la cosa che chiama main. Hai bisogno di quel codice. Tuttavia, come dice drescherjm, puoi incorporare quel codice di lib nel tuo exe (tramite l'opzione '/ MT' o'/MTd'), e quindi non hai bisogno di un file dll separato. –

risposta

13

È possibile collegare staticamente il runtime al progetto impostando il flag /MT. È possibile trovare questa opzione in Visual Studio 2013 nell'ambito Progetto>[ProjectName] Proprietà ...>Proprietà di configurazione>C/C++>Code Generation>Runtime Library. Assicurati di impostarlo solo per la configurazione Release.

+1

Lo consiglierei come risposta accettata perché descrive chiaramente cosa deve essere fatto.L'indicazione dei commenti non fornisce una risposta eloquente per l'utente finale. –

+1

Stavo affrontando lo stesso problema anche dopo averlo modificato in MT, dando ancora un messaggio di errore a msvcr120.dll non trovato –

3

Dai commenti. Per rimuovere il requisito di possedere eventualmente la ridistribuibile, è possibile creare l'applicazione con il runtime statico (opzione/MT) anziché con una delle opzioni di runtime dinamico.

+0

Grazie per la risposta. Ci sono effetti collaterali per questo approccio? È possibile aggiungere il .lib che non è stato compilato con l'opzione '/ MT' per proiettare con l'opzione'/MT'? In caso contrario, come posso determinare che, ad es. alcune librerie di terze parti sono state costruite con o senza l'opzione '/ MT'? – PolGraphic

+0

Le DLL di terze parti molto probabilmente useranno/MD che si desidera impedire questo è il motivo per cui sarà necessario evitarle. – drescherjm

+0

@dreschermj - hm, ok. Tuttavia, è molto poco elegante richiedere all'utente di installare ridistribuzioni VC++ per poter eseguire il mio gioco/applicazione. Personalmente non mi piace quando l'installer tenta di installarli o altre risorse condivise insieme all'app che volevo installare. – PolGraphic