web-dev-qa-db-ja.com

Java 64ビットシステム上のネイティブインターフェイス32ビットDLL

E:\Code\Java\JNITest>Java test
Exception in thread "main" Java.lang.UnsatisfiedLinkError: E:\Code\Java\JNITest\test.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
    at Java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at Java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at Java.lang.ClassLoader.loadLibrary(Unknown Source)
    at Java.lang.Runtime.loadLibrary0(Unknown Source)
    at Java.lang.System.loadLibrary(Unknown Source)
    at test.main(test.Java:16)`

Java Native Interfaceを使用しているときに、このエラーを生成する問題に遭遇しました。これは、私のシステムが64 -bitしたがってmy Javaは64ビットで実行されます。とにかくmy Javaが32ビットで実行されるようにする必要はありますか?

28
Frank Vanbever

32ビットJVMをインストールする必要があり、コードを実行できます。

アプリケーションを配布する場合、DLLの32ビットバージョンと64ビットバージョンの両方をビルドする必要があります。次に、以下の手法を使用して、顧客に関係なく適切なDLLロードしますArch。

    String archDataModel = System.getProperty("Sun.Arch.data.model");
    System.loadLibrary(libraryName+archDataModel);
27
Java42

明確に言うと、32ビットアーキテクチャ用に構築されたネイティブライブラリを読み込むには、JVMを32ビットモードで強制的に起動する必要があります。

Java -d32 ...

おそらく、プラットフォームに古いJVMをインストールする必要があります(たとえば、OS X上のOracleのJava 7は64ビットのみです。AppleのJava 6を彼らの知識ベース)。

8
fudge
  1. ダウンロードmingw-w64
  2. 環境変数PATHを更新します。
  3. メソッドに実装されているtest.cという名前のCプログラムを作成します。
  4. コマンドプロンプトで次のcmdを実行します

    gcc -Wl、-add-stdcall-alias -I "%Java_HOME%\ include" -I "%Java_HOME%\ include\win32" -shared -o test.dll test.c

1
arun kumar

JavaブラウザのプラグインChromeプラグインをインストールした後、同じエラーメッセージ(スタックトレースなし)が表示されました。

JDK/JRE(これは開発環境です)を再インストールすると修正されました。

1
isapir