2017-10-31 24 views
0

である私はそれが起こるようにJavaは、ネイティブDLLをロードして問題を抱えている64ビット版のWindows 7 FWIWパッケージはZeroMQですが、どのような重要なのjarファイルは、ネイティブを必要とすることですロードするDLL、jzmq.dllと呼ばれます。これは、libzmq.dll(およびいくつかの標準ライブラリ)に依存します。私は両方のdllをtarget/libにコピーし、java.language.pathを/ libをターゲットにするように設定しました。JavaのLoadLibraryの未解決の依存関係が、依存DLLは、同じディレクトリ

私が書く場合:

System.loadLibrary("jzmq"); 

私はCan't find dependent librariesUnsatisfiedLinkErrorを取得します。しかし、代わりに私が言う場合

System.loadLibrary("libzmq"); 
System.loadLibrary("jzmq"); 

その後、jzmq.dllが正常に読み込まれます。

添付瓶の中にそれだけでSystem.loadLibrary("jzmq")を持って、私は私のコードで依存関係をいじる必要はあり希望しません。依存関係が自動的にロードされない理由や、それが正しく動作するために必要なことが私には分かりません。

ありがとうございました!ライブラリの

答えて

1

依存関係がないのJavaランタイムによって、オペレーティング・システムによって解決されます。ディレクトリにjava.library.pathを設定すると、Javaランタイムはライブラリを探す場所を認識しますが、オペレーティングシステムは依然として依存関係を検出しません。 Windowsでライブラリを見つけるには、環境変数PATHにディレクトリを設定する必要があります。

PS: 従属ライブラリを最初に読み込んだときに最初に処理されるのは、後でプロセスのアドレス空間に格納され、Windowsがそこにあるためファイルシステム内で見つかる必要がないからです。

PPS:Windows上で依存ライブラリが自動的に見つかるという記事は、同じディレクトリに置くと真実の半分しか伝えません。この作品の理由は、a)は、彼らがexcutablesの依存関係ではない他のライブラリと話しているということであるb)は、明示的な作業ディレクトリなしで実行ファイルを起動すると、作業ディレクトリがそれに実行可能ファイルを持っているディレクトリになりますと、Windowsが自動的に追加されます検索パスへの作業ディレクトリ(したがって、同じディレクトリにあるライブラリが見つかります)。

関連する問題