View Full Version : [C++/VS2010] Miei .exe su altri PC e .dll mancanti
vendettaaaaa
25-01-2012, 21:32
Ciao,
ho creato un .exe con VS2010 e l'ho dato da testare ad un mio amico, ma non riesce a farlo funzionare perchè manca la libreria msvcp100.dll.
Allora l'ho cercata nel mio pc e ne ho trovate un po'...gliele ho passate ma il programma continua a non andare per un altro errore.
Più in generale, cosa diavolo dovrei fare per far funzionare i miei programmi su altri pc? Dire a VS2010 di compilarli in un modo "compatibile"? Includere una raccolta di .dll? Se sì, quali?
Con i programmi che ho scritto in Fortran non ho mai avuto di questi problemi, ma devo dire che mi sarà capitato 2-3 volte, sono ancora nuovo in questo campo...
Non so nulla ma ricordo una cosa. Se vuoi distribuirlo devi compilarlo in release, non debug. Lo fai?
Gli manca il runtime di Visual C++ 2010.
Comunque puoi scegliere di compilare includendo le librerie staticamente.
Gimli[2BV!2B]
25-01-2012, 22:29
Come ha scritto WarDuck (orcocàn, stavo scrivendo, non mi va di buttare il post :))
Piano "fai far qualcosa a lui": dovrebbe funzionare facendogli installare il Microsoft Visual C++ 2010 Redistributable Package appropriato.
x86 (http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=5555)
x86 SP1 (http://www.microsoft.com/download/en/details.aspx?id=8328)
x64 (http://www.microsoft.com/downloads/it-it/details.aspx?FamilyID=bd512d9e-43c8-4655-81bf-9350143d5867)
x64 SP1 (http://www.microsoft.com/download/en/details.aspx?id=13523)
Piano "facciamo un bel fagottone": linking statico. Da impostare nel progetto.
Breve post di un blog sull'argomento. (http://mariusbancila.ro/blog/2010/03/24/visual-studio-2010-changes-for-vc-part-5/)
Piano "caccia alle dll": usando Dependency Walker (http://www.dependencywalker.com/) si rintracciano quelle non di sistema, poi si mettono tutte in una cartella insieme all'exe e si distribuisce questa cartella.
vendettaaaaa
25-01-2012, 22:52
Grazie! E' strano perchè già ho pensato a far installare il pack, dal sito Microsoft, a mia sorella sul suo pc, ma non va cmq...
Ora vedo come includere le dll nel pacco :D
Non so nulla ma ricordo una cosa. Se vuoi distribuirlo devi compilarlo in release, non debug. Lo fai?
Ho letto qualche tempo fa che bisogna distribuire le proprie app in release per motivi legali, ma non ho approfondito. Cmq ho fatto sì in release.
vendettaaaaa
25-01-2012, 23:18
Alla fine il "breve articolo" dice solo cosa fare ma non come.
Bastava andare in Project -> Properties -> C/C++ Code Generation -> scegliere /MT anzichè /MTd.
Però se Microsoft aggiorna la .dll per motivi di sicurezza, il mio .exe continuerà ad usare quella vecchia :cool:
Attenzione, quello switch controlla la version debug / release delle librerie runtime da utilizzare.
Se utilizzi il link statico, cioè includi nell'eseguibile il tutto, è vero che il tuo pgm utilizzerà le librerie "vecchie".
In caso contrario, quello che obbliga chi riceve il pgm ad installare il "distributable runtime", il pgm utilizzerà le librerie installate sul PC di destinazione.
MS in genere mantiene la retrocompatibilità, quindi anche se il PC di destinazione aggiorna il runtime il pgm dovrebbe continuare a funzionare come prima.
vendettaaaaa
27-01-2012, 09:54
Attenzione, quello switch controlla la version debug / release delle librerie runtime da utilizzare.
Se utilizzi il link statico, cioè includi nell'eseguibile il tutto, è vero che il tuo pgm utilizzerà le librerie "vecchie".
In caso contrario, quello che obbliga chi riceve il pgm ad installare il "distributable runtime", il pgm utilizzerà le librerie installate sul PC di destinazione.
MS in genere mantiene la retrocompatibilità, quindi anche se il PC di destinazione aggiorna il runtime il pgm dovrebbe continuare a funzionare come prima.
Grazie, la prossima volta che buildo un'app riprovo col link dinamico, deve assolutamente funzionare se il mio amico installa il kit!
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.