web-dev-qa-db-ja.com

Eclipse / PyDev JythonプロジェクトのJava.library.pathに.dllを追加します

コンパイル済みの.jar JavaライブラリをPyDev Jythonプロジェクトで使用しようとしています。

.jarをPYTHONPATHに正常に追加し、自動完了機能を使用してコーディングを開始できました。

ライブラリには.dll拡張子javaHeclib.dllも必要なので、これをプロジェクトの[外部ライブラリ]セクションに追加しました。

ライブラリを正常にインポートできますが、その機能にアクセスしようとするとエラーが発生します。

Java.lang.UnsatisfiedLinkError: Java.lang.UnsatisfiedLinkError: no javaHeclib in Java.library.path

運のない実行構成にVM引数を追加しました。

-Djava.library.path="Y:/path/to/javaHeclib.dll;${env_var:PATH}"

上記のJava.library.pathを使用して、コマンドラインからライブラリを実行できます。

PyDev Consoleで実験して、絶対パスで.dll拡張子をロードできますが、相対パスではロードできないことに気付きました。

>>> import Java.lang
>>> Java.lang.System.load('Y:/path/to/javaHeclib.dll')
>>> Java.lang.System.loadLibrary('javaHeclib')
Traceback (most recent call last):
  File "<console>", line 1, in ?
Java.lang.UnsatisfiedLinkError: Java.lang.UnsatisfiedLinkError: no javaHeclib in Java.library.path

残念ながら、ライブラリは上記のSystem.loadLibrary呼び出しを使用しているため、そのソースにアクセスできません。

javaHeclib.dllJava.library.pathにないのはなぜですか?

[〜#〜] edit [〜#〜]

Java.library.pathをdllを含むディレクトリに設定しても、System.loadLibraryを使用してロードできませんでした。

-Djava.library.path="Y:/path/to/dll/;${env_var:PATH}"

(スラッシュを使用しても違いはありませんでした。)また、デフォルトのVM args in Eclipse.iniを変更することもできました。

-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx384m
-Djava.library.path="Y:\path\to\dll\;${env_var:PATH}"
20
Robbie Rosati

これが機能しました。

今後の参考のために:

必要なdllがY:\path\to\dlls\lib\にあるとします。次に、実行構成の作業ディレクトリをY:\path\to\dlls\に設定し、VM引数に-Djava.library.path=libを含めるように設定します。

これで、動作するはずです。 Java.library.pathで絶対パスを指定することが以前は機能しなかった理由はわかりませんが、作業ディレクトリを設定するとうまくいったようです。

おそらく、それは私が使用している特定のライブラリに固有のものです(または、Eclipseがライブラリとは異なるドライブから実行されている)...

9
Robbie Rosati

私はより良い方法だと思う:

  1. プロジェクトの下に、dllなどのフォルダーを作成します。
  2. すべてのdllファイルをこのフォルダーにコピーして貼り付けます。
  3. プロジェクト->プロパティ-> Java Build Path-> Source]で、ソースの詳細をクリックして展開します。
  4. ネイティブライブラリの場所が表示されます。クリック/ハイライトします。
  5. 次に、右側の[編集]をクリックし、もう一度ワークスペースをクリックします。プロジェクトの下にdllフォルダーがあります。
  6. それを選択し、[OK]、[OK]をクリックします。ネイティブライブラリの場所にdllが追加されます。

それでおしまい。設定を手動で変更する必要はありません。 ここに画像の説明を入力

45
Wayne

同様の問題がありましたが、Ghost Script dllを使用していました。作業ディレクトリにファイルを配置して指示に従った後でも、私にとってはうまくいきませんでした Ghost4J。Java.lang.UnsatisfiedLinkError:Unable to load library 'gsdll64' を参照して使用しました-Djna.library.pathを有効にします。

0
Jeya Venkatesh