2011-09-06 18 views
5

Ho un exe che dipende da libeay32.dll. Entrambi compilati per 32 bit.windows 7 PATH errato a 64 bit durante il caricamento di una libreria a 32 bit per 32 bit exe

Ho copiato l'exe in C: \ Programmi (x86) \ app \ bin e la DLL in C: \ Programmi (x86) \ app \ lib. Per garantire il corretto funzionamento, ho aggiunto C: \ Programmi (x86) \ app \ lib al percorso.

Su Windows 7 64 bit, quando eseguo l'exe, ho ottenuto un errore libeay32.dll non trovato.

Utilizzando dependency walker per 32 bit, la libreria si trova correttamente in C: \ Programmi (x86) \ app \ lib. Utilizzando sysinternal process explorer l'app viene eseguita correttamente. Anche l'uso di cmd funziona. Utilizzando Dipendente Walker per 64 bit, posso vedere le librerie mancanti. Anche la copia dei due file insieme o dll su syswow64 funziona perfettamente.

Se l'applicazione è stata compilata per 32 bit ...

finestre Perché isnt alla ricerca di 32 biblioteche bit? Perché le librerie non sono state risolte se la directory è già sul percorso?

La mia ipotesi è che w7 sta ignorando il percorso, ma in base a questo: http://msdn.microsoft.com/en-us/library/ms682586%28v=vs.85%29.aspx non dovrebbe !.

Perché non posso eseguire il mio exe con dipendenze che si trovano sul percorso? Devo registrare la biblioteca o qualcosa del genere?

Tutte le idee saranno molto apprezzate.

EDIT:

Il programma sua correttamente lanciato/eseguito quando fatto dall'inizio menu-> programma, ma non direttamente sul .exe ... WTF?

Utilizzando ProcMon sembra essere il tentativo di aprire (notare la mancanza di " "): "C: \ Program Files (x86) \ myapp \ terze parti \ openssl \ libeay32.dll" ma nel percorso la sua corretto (ricontrollato: "C: \ Program Files (x86) \ myapp \ terze parti \ openssl")

RISPOSTA ?: c'è uno scenario di know/bug per cui l'impostazione "C: \ Program Files (x86) "in path, lead windows tenta di caricare" C: \ Program Files (x86) "invece ???? (vedi utilizzo procmon senza NESSUN filtro)

Windows 7 bug x64?

+0

Per quanto ne so, PATH viene consultato solo per individuare un EXECUTABLE. Una Lib o una DLL non possono essere eseguite da sole - possono supportare solo un altro eseguibile. – Arun

+2

@Arun - Windows utilizza il percorso per individuare le DLL. Vedi http://msdn.microsoft.com/en-us/library/7d83bc18.aspx – shf301

+0

Il mio male, riprendo. Sì, lo fa. Grazie mille per aver corretto il mio errore! – Arun

risposta

0

Puoi mvoe la lib nella stessa directory, perché lì controlla sempre per prima. Se è stato trovato, è usato. Sui sistemi Windows a 64 bit è possibile (non provato) spostare le librerie anche nella cartella SystemWOW64 in cui sono archiviate le versioni a 32 bit, ma raccomanderei la prima versione.

Problemi correlati