web-dev-qa-db-ja.com

AMD 64ビットプラットフォームでIA 32ビット.dllをロードできない

私は 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ソースコードを利用可能にします。

50
Nick Heiner

はい、64ビット用にDLLを再コンパイルする必要があります。他の唯一のオプションは、32ビットJVMに切り替えるか、32ビットプロセスを取得して、代わりにDLLをロードし、何らかの方法でそのプロセスと通信することです。

70
Daniel Pryden

Windows XP上で実行することを最初に意図したtibco dllを使用したJavaアプリケーションでも同じ問題が発生しました。 Windows 7で動作させるために、アプリケーションが32ビットJREを指すようにしました。別の解決策があるかどうかを待っています。

4
aditya

最初の質問への短い答え:はい。

より長い答え:多分。 SVMLightのビルドプロセスが64ビットウィンドウで動作するかどうかに依存します。

最後の注意:System.loadLibraryの呼び出しはばかげています。フルパス名でSystem.loadを呼び出すか、Java.library.pathを検索します。

2
bmargulies

Install jdk_x86 をインストールするだけでProgram Files(x86)にインストールし、プロジェクトにjreパスを設定します。それでおしまい。

1
JoboFive

これを手に入れた- 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 );
1
Vincent Tan

Win64bitとJVM 64bitで同じ問題がありました

Dllをsystem32にアップロードすることで解決しました

1
Yaro

に行く

プロジェクトプロパティ>>実行>> VMオプション

このアドレスを入力してください:

-Djava.library.path="C:\opencv\build\Java\x64"
1
eng_hish

PATHをProgram Files(x86)ではなくProgram Filesに設定していることを確認してください。これで私の問題は解決しました。

1
Wojciechu

ネイティブライブラリで.dllをx64からx86に変更するだけで心配する必要はありません。

例:-これを選択した可能性があります(C:\ opencv\build\Java\x64)。

代わりに、ネイティブライブラリ(C:\ opencv\build\Java\x86)にこれを選択します。

0
Akash

ネイティブライブラリの場所には、X86 over X86を使用します。少なくとも私が持っていたこの修正された問題。

0
이재찬

私の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;

仕事を始めました...これがみんなの役に立つことを願っています。

0

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; ..

0
Denys Zotov

これに関連する問題があり、読んでいた

"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フォルダーにコピーして、問題を解決しました。これが誰かの助けになることを願っています。

0
Oti

以下は、コマンドライン/コマンドプロンプトからコンパイルするユーザーに対する回答です。 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
0
bballdave025