私は SVMLight Javaから このページのJNIラッパー を使用しようとしています:
static {
System.loadLibrary("lib/JNI_SVM-light-6.01/lib/svmlight");
}
次のエラーが表示されます。
... lib\JNI_SVM-light-6.01\lib\svmlight.dll:AMD 64ビットプラットフォームでIA 32ビット.dllをロードできません
.dllを64ビット用に再コンパイルすることでこれを解決できますか? これを行うにはどうすればよいですか?他に使用できる回避策はありますか? SVMLightは、Cソースコードを利用可能にします。
はい、64ビット用にDLLを再コンパイルする必要があります。他の唯一のオプションは、32ビットJVMに切り替えるか、32ビットプロセスを取得して、代わりにDLLをロードし、何らかの方法でそのプロセスと通信することです。
Windows XP上で実行することを最初に意図したtibco dllを使用したJavaアプリケーションでも同じ問題が発生しました。 Windows 7で動作させるために、アプリケーションが32ビットJREを指すようにしました。別の解決策があるかどうかを待っています。
最初の質問への短い答え:はい。
より長い答え:多分。 SVMLightのビルドプロセスが64ビットウィンドウで動作するかどうかに依存します。
最後の注意:System.loadLibraryの呼び出しはばかげています。フルパス名でSystem.loadを呼び出すか、Java.library.pathを検索します。
Install jdk_x86 をインストールするだけでProgram Files(x86)にインストールし、プロジェクトにjreパスを設定します。それでおしまい。
これを手に入れた- http://blog.cedarsoft.com/2010/11/setting-Java-library-path-programmatic/
Java.library.pathを設定する場合、機能させるには次の行が必要です。
Field fieldSysPath;
fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );
Win64bitとJVM 64bitで同じ問題がありました
Dllをsystem32にアップロードすることで解決しました
に行く
プロジェクトプロパティ>>実行>> VMオプション
このアドレスを入力してください:
-Djava.library.path="C:\opencv\build\Java\x64"
PATHをProgram Files(x86)ではなくProgram Filesに設定していることを確認してください。これで私の問題は解決しました。
ネイティブライブラリで.dllをx64からx86に変更するだけで心配する必要はありません。
例:-これを選択した可能性があります(C:\ opencv\build\Java\x64)。
代わりに、ネイティブライブラリ(C:\ opencv\build\Java\x86)にこれを選択します。
ネイティブライブラリの場所には、X86 over X86を使用します。少なくとも私が持っていたこの修正された問題。
私のWindowsラップトップはクライアント32と64ビットの両方を持っています私は突然のすべてに直面し始めたので、次のようにパス変数を並べ替えました
前:
C:\app\Oracle64\product\12.1.0\client_1\bin;
C:\app\Oracle32\product\12.1.0\client_1\bin;
後:
C:\app\Oracle32\product\12.1.0\client_1\bin;
C:\app\Oracle64\product\12.1.0\client_1\bin;
仕事を始めました...これがみんなの役に立つことを願っています。
Windows x64でred5(Tomcat)を実行すると、以前はWindows x32で動作していた問題があり、次のエラーが発生しました:
INFO pool-15-thread-1 com.home.launcher.CommandLauncher - Exception in thread "main" Java.lang.UnsatisfiedLinkError: C:\....\lib\Data Samolet.dll: Can't find dependent libraries
INFO pool-15-thread-1 com.home.launcher.CommandLauncher - at Java.lang.ClassLoader$NativeLibrary.load(Native Method)
Java x32バージョンをインストールし、次に設定すると問題は解決しました
"環境変数"
「ホームのユーザー変数」
Java_HOME => C:\ Program Files(x86)\ Java\jdk.1.6.0_45
「システム変数」
パス[先頭] => C:\ Program Files\Java\jdk.1.8.0_60; ..
これに関連する問題があり、読んでいた
"Exception in thread "main" Java.lang.UnsatisfiedLinkError: C:\opencv\build\Java\x86\opencv_Java2413.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform "and it took me an entire night to figure out.
C:\opencv\build\Java\x64
のdllをsystem32フォルダーにコピーして、問題を解決しました。これが誰かの助けになることを願っています。
以下は、コマンドライン/コマンドプロンプトからコンパイルするユーザーに対する回答です。 Path
環境変数を変更する必要はありません。 32ビットJVM
を使用するプログラムに32ビットDLL
を使用するだけです。
コンパイルでは、どのjavac
が使用されるかは重要ではありません(32ビットまたは64ビット)。
>javac MyProgramWith32BitNativeLib.Java
プログラムの実際の実行では、Java.exe
の32ビットバージョンへのパスを指定することが重要ですis
Windows
のコード例を投稿します。これは、OPが使用するOSのようです。
Windows
ほとんどの場合、コードは次のようになります。
>"C:\Program Files (x86)\Java\jre#.#.#_###\bin\Java.exe" MyProgramWith32BitNativeLib
違いは、jre
の後の数字になります。使用する番号を見つけるには、次を入力します。
>dir "C:\Program Files (x86)\Java\"
私のマシンでは、プロセスは次のとおりです
C:\Users\me\MyProject>dir "C:\Program Files (x86)\Java"
Volume in drive C is Windows
Volume Serial Number is 0000-9999
Directory of C:\Program Files (x86)\Java
11/03/2016 09:07 PM <DIR> .
11/03/2016 09:07 PM <DIR> ..
11/03/2016 09:07 PM <DIR> jre1.8.0_111
0 File(s) 0 bytes
3 Dir(s) 107,641,901,056 bytes free
C:\Users\me\MyProject>
だから、私の数字は1.8.0_111
であり、私のコマンドは
C:\Users\me\MyProject>"C:\Program Files (x86)\Java\jre1.8.0_111\bin\Java.exe" MyProgramWith32BitNativeLib