2

元のdllをロードするネイティブライブラリをロードしようとしています。ただし、XP 32ビットを実行している別のコンピューターでは、正常に動作します。win7 64ビットシステムで実行すると、ロードに失敗します。xpマシンでは、dllファイルはクラスファイルと同じディレクトリにある可能性がありますが、不満足なリンクエラーが発生しないように、ファイルをsystem32フォルダーにコピーする必要がありました。次に、32ビットdllを64ビットプロセスにロードできないことを示すエラーが発生しました。32ビットjdkをダウンロードし、プロジェクトでjdkを設定して32ビットjdkをロードしました。それが完了すると、再びUnsatisfied linkエラーが発生し、ファイルはまだsystem32にあり、クラスファイルの隣にあります。64ビットのjdkを使用しているときにライブラリが検出され、32ビットのjdkでは検出されない理由について、私は混乱しています。

...
static {
    System.loadLibrary("K8055jni");
}

Exception in thread "main" java.lang.UnsatisfiedLinkError: no K8055jni in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at K8055jni.<clinit>(K8055jni.java:50)
at Test.main(Test.java:4)

32ビットjdkで同じファイルを見つけるにはどうすればよいですか?

4

1 に答える 1

1

あなたの質問と問題を正しく理解している場合は、次のいずれかを試してください。

  1. Windows 7 は、32 ビット DLL を \Windows\System32 ではなく \Windows\SysWOW64 に配置します。奇妙なことに、Win 7 では、System32 は 64 ビット バイナリ専用です。詳細については、これこれを参照してください。

  2. さらに良いのは、バイナリ ファイルをアプリケーション フォルダーに配置し、Java コマンド ラインで次のように指定することです。

    -Djava.library.path=<path-to-dll-lib>

于 2012-09-06T20:05:59.810 に答える