1

org.zeromq.ZMQ をインポートします。

- 上記のインポート文では、ZMQ.java ファイルで構成される jzmq マスター フォルダー内の「org フォルダー」を使用しています。

・というわけで、コンパイルは問題ありません。プログラムの実行を開始すると、以下の例外が表示されます

スレッド「メイン」での例外 java.lang.UnsatisfiedLinkError: java.lang.System の java.lang.Runtime.loadLibrary0(不明なソース) の java.lang.ClassLoader.loadLibrary(不明なソース) の java.library.path に jzmq がありません.loadLibrary(未知のソース) org.zeromq.ZMQ.(ZMQ.java:41) で server.main(Server.java:13)

どうすればいいですか?Java での ZeroMQ helloworld の例では、どのパッケージをダウンロードする必要があり、どのインポート ステートメントを使用する必要がありますか?

多くの人が libzmq.dll 、 jzmq.dll 、およびいくつかの jar ファイルを使用して、その例外を回避しているのを見ました。でも明確な答えが欲しい。

4

2 に答える 2

3

この lib (jzmq) は、ネイティブ ライブラリ libzmq にバインドされています。libzmq の機能 (ipc など) を使用しない場合は、Java の完全な実装であるjeromq ( mvnrepojeromq git ) を使用することをお勧めします。ほぼ同等の機能を備えています。

それ以外の場合は、jzmq が必要な場合は、適切にコンパイルする必要があります。これは、Windows x64でコンパイルした方法です:

ライブラリをビルドするには、IDE Visual Studio 2010 以降が必要です。この例では、2013 バージョンを使用しました。すべての作業はディレクトリで実行されますC:\zmq(たとえば)。

  1. zeromq、jzmq、および libsodium-1.0.10 のソースを取得します。
  2. zeromq ディレクトリの内容全体を にコピーしC:\zmqます。
  3. ディレクトリを作成しますC:\zmq\java
  4. jzmq ディレクトリの内容全体を にコピーしC:\zmq\javaます。
  5. ディレクトリC:\zmq\libsodiumを作成し、C:\zmq\libsodium
  6. C:\zmq\libsodium\binディレクトリlibsodium-1.0.10-msvc\Win32に コピーします。libsodium-1.0.10-msvc\x64
  7. ディレクトリを作成しますC:\zmq\libsodium\src
  8. C:\zmq\libsodium\src directory libsodium-1.0.10-msvc\include にコピーします。

ゼロムク。

ディレクトリから適切な zeromq ソリューション ファイルを Visual Studio で開きますC:\zmq\builds\msvc

構成マネージャーを開きます。アクティブな構成ソリューション - DynRelease を選択します。アクティブなソリューション プラットフォーム - x64 を選択します。

プロジェクトのプロパティ ページを開き、[構成プロパティ] - [C/C++] - [全般] に移動し、インクルード ファイル ディレクトリのパスを確認します。

次に、リンカー - 一般を選択し、ライブラリ ディレクトリのパスを確認します。

セクション内の構成ファイルのC:\zmq\builds\msvc\vs2013\libsodium.import.props正しいパス。

すべてが正しければ、C:\zmq\bin\x64\Release\v120\dynamicディレクトリにdllを取得します。そうでない場合は、ログを確認し、変更を加えて再構築します。


Jzmq。

ディレクトリから適切な jzmq ソリューション ファイルを開きます。C:\zmq\java\builds\msvc\

同様に、zeromq プロジェクトで構成マネージャーを開き、リリースと x64 プラットフォームを選択します。

プロジェクトのプロパティ ページを開き、[構成プロパティ] - [VC ++ ディレクトリ] に移動して、JDK がインストールされたパスが正しいことを確認します。次のようなものが表示されます。

..\..\..\..\include;C:\Program Files\Java\jdk1.7.0_71\include;C:\Program
Files\Java\jdk1.7.0_71\include\win32;$(IncludePath)

また、ライブラリ カタログ (名前は忘れました) パスに、ビルドされた zeromq ライブラリを含むディレクトリへのパスが含まれていることを確認します。次のようになります。

..\..\..\..\bin\x64\Release\v120\dynamic;$(LibraryPath)

プロパティ ページで、[構成プロパティ] - [アセンブリ イベント] - [アセンブリ前のイベント] に移動し、[コマンド プロンプト] プロパティを確認します (まず、コピー コマンドでファイルへのパスを確認します)。次のようになります。

copy ..\config.hpp "..\..\..\src\main\c++\"

次に、jzmq をビルドします。すべてが正しければ、ファイルが に取得されますC:\zmq\java\lib

そうでない場合は、ログを確認し、変更を加えて再構築します。


C:\zmqbin ディレクトリのみが必要な場合はjava\lib、残りを削除できます。

PATH にパスを追加し、bin\x64\Release\v120\dynamicJava アプリを実行します-Djava.library.path="path_to_java\lib"

于 2016-12-21T20:12:11.997 に答える
1

Linux(Eclipse)でも同じ問題が発生しました。zmq.jarのネイティブライブラリjzmqのパスを設定することで解決しました。プロジェクトのプロパティに移動すると (プロジェクトを右クリック -> プロパティ... -> Java ビルド パス)、ライブラリ タブで JDIC.jar をライブラリとして追加し、それを展開して、ネイティブ ライブラリの場所プロパティを編集できます。ネイティブ ライブラリを含むフォルダーを指すようにします。私の場合は /usr/local/lib でした。

したがって、基本的には、起動構成で VM 引数として -Djava.library.path を追加するか、 http: //www.eclipsezone.com/eclipse/forums/t49342.html で指定されているようにネイティブ ライブラリを設定できます。

この問題を抱えている人々に役立つことを願っています。

良い一日を過ごしてください。

于 2018-08-10T14:42:16.357 に答える