コンパイル済みの.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.dll
がJava.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}"
これが機能しました。
今後の参考のために:
必要なdllがY:\path\to\dlls\lib\
にあるとします。次に、実行構成の作業ディレクトリをY:\path\to\dlls\
に設定し、VM引数に-Djava.library.path=lib
を含めるように設定します。
これで、動作するはずです。 Java.library.path
で絶対パスを指定することが以前は機能しなかった理由はわかりませんが、作業ディレクトリを設定するとうまくいったようです。
おそらく、それは私が使用している特定のライブラリに固有のものです(または、Eclipseがライブラリとは異なるドライブから実行されている)...
私はより良い方法だと思う:
それでおしまい。設定を手動で変更する必要はありません。 ここに画像の説明を入力
同様の問題がありましたが、Ghost Script dllを使用していました。作業ディレクトリにファイルを配置して指示に従った後でも、私にとってはうまくいきませんでした Ghost4J。Java.lang.UnsatisfiedLinkError:Unable to load library 'gsdll64' を参照して使用しました-Djna.library.pathを有効にします。