View Full Version : Scoprire tutte le dipendenze di un eseguibile
tomminno
30-12-2006, 15:18
Mi è capitato di compilare un programma C++ staticamente utilizzando le wxWidgets e le Winsocks, ma su qualche computer il programma non parte fornendo un messaggio che consiglia la reinstallazione dell'applicativo.
Ho provato a cercare con Dependancy Walker ma mi è sembrato di trovare solo librerie di sistema.
C'è un modo per recuperare esattamente tutte le librerie che vengono linkate e creare un pacchetto di installazione?
veramente il dependency walker è già il massimo che ci sia per questo scopo: so che nelle sue ultime versioni oltre ad analizzare le dipendenze implicite fa anche un minimo di profiling nel tentativo di scoprire quelle esplicite (chiamate a LoadLibraryExW). se non hai una versione aggiornata scaricalo da www.dependencywalker.com.
tomminno
08-01-2007, 10:42
veramente il dependency walker è già il massimo che ci sia per questo scopo: so che nelle sue ultime versioni oltre ad analizzare le dipendenze implicite fa anche un minimo di profiling nel tentativo di scoprire quelle esplicite (chiamate a LoadLibraryExW). se non hai una versione aggiornata scaricalo da www.dependencywalker.com.
Provando sul computer incriminato ho scoperto che i problemi derivano dal manifest file. Mi dà problemi il WinSXS, senza specificare niente di più. VS2005 dovrebbe includere il manifest nell'eseguibile e nelle librerie, quindi immagino ci sia qualche problema di versione tra le librerie che vengono linkate.
Mentre per le librerie mi segnala in rosso shlwapi.dll, che invece non compare nelle dipendenze nei computer in cui il tutto funziona. Che sia un problema di versione di questa libreria?
Ma cambia qualcosa se compilo senza il manifest file?
Sostanzialmente non ho ben capito a che serva il manifest, sembra solamente per avvisare in anticipo l'OS di quali librerie caricare.
giangian2
08-01-2007, 12:18
Ciao,
il problema della mfc80 e` molto comune su WinXP.
Prima di tutto nel computer in cui hai installato la tua applicazione hai installato il "vcredist" che installa le librerie per far girare le applicazione installate con VS2005?
Io sviluppo con VS2005 ed ho trovato molti problemi anche dopo l'installazione del SP1, come dici tu il problema e` dovuto dal file Manifest che viene linkato.
ciaooooo
tomminno
08-01-2007, 12:31
Ciao,
il problema della mfc80 e` molto comune su WinXP.
Prima di tutto nel computer in cui hai installato la tua applicazione hai installato il "vcredist" che installa le librerie per far girare le applicazione installate con VS2005?
Io sviluppo con VS2005 ed ho trovato molti problemi anche dopo l'installazione del SP1, come dici tu il problema e` dovuto dal file Manifest che viene linkato.
ciaooooo
Una applicazione utilizza direttamente le API Win32 e linka alcune dll dell'applicativo, sia l'eseguibile che le librerie segnalano il medesimo problema.
L'altra applicazione utilizza le wxWidgets e il problema è il medesimo.
L'opzione di compilazione è, in entrambi i casi MT perciò non dovrebbe avere dipendenze CRT, in effetti non appaiono dipendenze dirette con dependency walker (però pare che commctrl.dll richiami msvcrt.dll).
Non ho installato il vcredist, farò anche questa prova, però il problema segnalato non è la mancanza di dll ma problemi con il manifest.
Ma cambia qualcosa se compilo senza il manifest file? non saprei, non mi sono mai informato, comunque prova.
Sostanzialmente non ho ben capito a che serva il manifest, sembra solamente per avvisare in anticipo l'OS di quali librerie caricare. contiene alcune informazioni tra cui, che io sappia, i path di alcune librerie (senza i quali il sistema operativo potrebbe non sapere dove cercarle se non stanno in system32) e altre che richiedono o meno l'uso della grafica di XP nel programma.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.