2011-01-17 16 views
12

Sto solo iniziando a utilizzare ZeroMQ e sto sperimentando con alcuni dei campioni. Sto utilizzando i binding di linguaggio C# e ho riscontrato un problema con l'ottenimento di un'eccezione DllNotFound.ZeroMQ DllNotFoundException using .Net Bindings

Posso caricare ed eseguire i campioni su La mia macchina di sviluppo dopo aver copiato libzmq.dll in Windows/System32, ma quando sposto le cose su altri server, ottengo l'errore nonostante copi libzmq.dll in entrambi la cartella degli esempi stanno girando da e verso Windows/System32.

Ho messo clzmq.dll nella cartella l'app di esempio e anche libzmq.dll Inoltre, ho inserito libzmq in c:/Windows/System32. Sono in esecuzione Windows Server 2003 Service Pack 2. Quando controllo le variabili di ambiente della macchina, WINDOWS/System32 si trova nella variabile PATH. Mi sono anche assicurato di costruire la libzmq dll usando Release, non il debug.

E 'possibile che io non capisco come lo ZeroMQ .Net rilegatura deve essere utilizzato. Ho aggiunto clzmq.dll (The .Net Binding) al mio progetto come riferimento e ho assunto che clzmq.dll farebbe automaticamente riferimento a libzmq sulla variabile PATH di Windows WINDOWS/System32.

Qualcuno sa se mi sbaglio su questo. La documentazione C# Binding (http://www.zeromq.org/bindings:clr) afferma che il "file di libreria ZeroMQ dovrà essere reso disponibile per il binding per funzionare", ma non è riuscito a renderlo disponibile nonostante copiato nella variabile PATH.

Qualcuno ha sperimentato la DLL non trovato un'eccezione quando si utilizza lo ZeroMQ Net Associazioni?

Grazie per l'aiuto,

+6

Ho pensato di pubblicare la soluzione per questo se ci fosse qualcun altro. Il libzmq.dll ha dipendenze su MSVCP100.dll che era assente dalla macchina su cui stavo cercando di eseguire l'app. Il modo in cui ho capito questo è stato il download e l'esecuzione di dependency walker da www.dependencywalker.com e semplicemente eseguendolo. Ha mostrato immediatamente la DLL mancante. Ho quindi installato il pacchetto ridistribuibile Microsoft Visual C++ 2010 per correggere la DLL di threading mancante necessaria per libzmq. Spero che questo salvi altri un po 'di tempo. – Learning1

+0

Dovresti postare questa risposta come risposta e selezionarla come la soluzione alla tua domanda. In questo modo le persone saranno in grado di trovarlo più facilmente. – dandan78

+0

Solo per lanciarlo, anche se sono su una versione x64 di windows, ho bisogno di installare la versione x86 del ridistribuibile. Ha senso ora, ma ho sprecato un'ora a venire a quella realizzazione. –

risposta

2

ho ancora lo stesso problema dopo che ho controllato il mio sistema non disporre di Microsoft Visual C++ 2010 Redistributable. Il mio sistema operativo è Windows 7 a 64 bit. Ho avuto biblioteca ZeroMQ da NuGet in Visual Studio 2010.

PS, ho trovato la soluzione per risolvere il mio errore. Quando si scarica ZeroMQ da NuGet in VS, in realtà c'è un avviso che ho ignorato all'inizio. Dice di copiare manualmente libzmq.dll nella directory di output del progetto, oltre al riferimento di clrzmq2. Dopo aver copiato manualmente libzmq.dll nella directory di output, ora funziona. A proposito, ho provato a copiare libzmq.dll in C: \ Windows \ System32 come menzionato sopra, non ha funzionato troppo.

Spero che aiuti.

8

ho incontrato questo errore esatto su Windows Server 2008. Non appena il mio codice ha tentato di creare un clrzmq (2.2.3) oggetto, Windows ha tentato di caricare la DLL e venuto a mancare con l'errore:

Unable to load DLL 'libzmq': The specified module could not be found. 

La DLL è sicuramente presente. Ho provato una varietà di soluzioni con permessi, che non sono riusciti a risolvere il problema. Il download del & installazione del ridistribuibile C++ VS2010 ha risolto il mio problema.

+0

Grazie, vorrei votare 10 volte se potessi :) –

2

Se si utilizza il pacchetto NuGet ZeroMQ e viene visualizzato l'errore:

Unable to load DLL 'libzmq' 

Vai a Esplora soluzioni e vedere che il pacchetto NuGet ha aggiunto amd64 e cartelle i386 per voi. Espandi queste cartelle, seleziona tutti i file al loro interno, quindi vai alla finestra Proprietà e seleziona "Copia se più recente" per "Copia nella directory di output".

Questa sembra essere la soluzione più elegante del problema e funziona automaticamente per entrambe le architetture. Windows cercherà il percorso corrente + i386/amd64 in base all'architettura.

+0

Questo ha risolto il mio problema. Ed è anche una soluzione piuttosto elegante – Nitay