2011-01-17 24 views
12

私はZeroMQの使用を開始しており、いくつかのサンプルを試しています。私はC#言語バインディングを使用しており、DllNotFound例外を取得する問題に遭遇しました。ZeroMQ DllNotFoundException .Netバインディングを使用

libzmq.dllをWindows/System32にコピーした後、私の開発マシンでサンプルをロードして実行できますが、他のサーバーに移動すると、libzmq.dllを両方のフォルダにコピーしてもエラーが発生しますWindows/System32から実行されています。

サンプルアプリケーションが入っているフォルダにclzmq.dllを入れ、li​​bzmq.dllも入れました。またlibzmqをc:/ Windows/System32に入れました。 Windows Server 2003 Service Pack 2を実行しています。マシン環境変数を確認すると、WINDOWS/System32はPATH変数にあります。私はまた、リリースではなく、デバッグを使用してlibzmq dllをビルドするようにしました。

ZeroMQ .Net Bindingの使用方法がわかりません。 clzmq.dll(.Net Binding)を私のプロジェクトに参照として追加しました.clzmq.dllがWindows PATH変数WINDOWS/System32上で自動的にlibzmqを参照すると仮定しました。

私はこれに間違われているかどうかは知っていますか? C#バインディングのドキュメント(http://www.zeromq.org/bindings:clr)は、 "ZeroMQライブラリファイルをバインディングのために利用できるようにする必要がある"と述べていますが、PATH変数にコピーしても使用できるようにしていません。

ZeroMQ .Net Bindingsを使用しているときにDLLが見つかりませんでした。助けのための

おかげで、

+6

誰かがそれに遭遇した場合、私はこれに対する解決策を投稿すると考えました。 libzmq.dllは、私がアプリケーションを実行しようとしていたマシンになかったMSVCP100.dllに依存しています。私がこれを理解したのは、www.dependencywalker.comから依存性ウォーカーをダウンロードして実行し、単にそれを実行することでした。すぐに欠落していたDLLが表示されました。次に、Microsoft Visual C++ 2010 Redistributableパッケージをインストールして、libzmqに必要な欠落しているスレッドDLLを修正しました。私はこれを他の人にしばらく保存して欲しい。 – Learning1

+0

これを回答として投稿し、質問の解決策として選択する必要があります。そうすれば、人々はもっと簡単にそれを見つけることができます。 – dandan78

+0

私はWindowsのx64版を使っていますが、x86版の再配布可能ファイルをインストールする必要がありました。今は意味をなさないが、私はその実現に向けて1時間を無駄にしている。 –

答えて

2

私はまだ私は、Microsoft Visual C++ 2010再頒布を持っていない私のシステムを確認した後に同じ問題を抱えています。私のOSはWindows 7 64bitです。私はVisual Studio 2010のNuGetからZeroMQライブラリを入手しました。

PS、私は私のエラーを解決する解決策を見つけました。 VSのNuGetからZeroMQをダウンロードすると、最初は無視した警告が実際に表示されます。これは、libzmq.dllをclrzmq2の参照の他にプロジェクトの出力ディレクトリに手動でコピーすると言います。 libzmq.dllを出力ディレクトリに手動でコピーした後、現在動作しています。ちなみに上記のようにlibzmq.dllをC:\ Windows \ System32にコピーしようとしましたが、動作しませんでした。

希望します。

8

私はオブジェクト(2.2.3)とすぐに私のコードはclrzmqを作成しようとしてのWindows Server 2008上でこの正確なエラーが発生し、WindowsがDLLをロードしようとエラーで失敗しました:

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

DLLが最も確実に存在します。権限を持つさまざまなソリューションを試しましたが、そのすべてが問題の解決に失敗しました。 & VS2010 C++再配布可能ファイルをインストールすると、私の問題は解決しました。

+0

ありがとうございます、もし私ができるなら、私は投票を10回するでしょう:) –

2

あなたはNuGet ZeroMQパッケージを使用していて、エラーが発生した場合:

Unable to load DLL 'libzmq' 

ゴーソリューションエクスプローラへとNuGetパッケージはあなたのためのamd64とi386のフォルダが追加されていることがわかります。これらのフォルダを展開し、その中のすべてのファイルを選択してから、[プロパティ]ウィンドウに移動し、[出力ディレクトリにコピー]を[新しい場合はコピー]を選択します。

これは問題の最も洗練された解決策であり、両方のアーキテクチャで自動的に機能します。 Windowsはアーキテクチャに基づいて現在のパス+ i386/amd64を検索します。

+0

それは私の問題を解決しました。また、非常にエレガントなソリューションです – Nitay