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ビットで実行されるようにする必要はありますか?
32ビットJVMをインストールする必要があり、コードを実行できます。
アプリケーションを配布する場合、DLLの32ビットバージョンと64ビットバージョンの両方をビルドする必要があります。次に、以下の手法を使用して、顧客に関係なく適切なDLLロードしますArch。
String archDataModel = System.getProperty("Sun.Arch.data.model");
System.loadLibrary(libraryName+archDataModel);
明確に言うと、32ビットアーキテクチャ用に構築されたネイティブライブラリを読み込むには、JVMを32ビットモードで強制的に起動する必要があります。
Java -d32 ...
おそらく、プラットフォームに古いJVMをインストールする必要があります(たとえば、OS X上のOracleのJava 7は64ビットのみです。AppleのJava 6を彼らの知識ベース)。
コマンドプロンプトで次のcmdを実行します
gcc -Wl、-add-stdcall-alias -I "%Java_HOME%\ include" -I "%Java_HOME%\ include\win32" -shared -o test.dll test.c
JavaブラウザのプラグインChromeプラグインをインストールした後、同じエラーメッセージ(スタックトレースなし)が表示されました。
JDK/JRE(これは開発環境です)を再インストールすると修正されました。