での可能性の重複:私のJavaアプリケーションで
Java : switching between dll depends on system architecture (32/64)読み込んで32ビットまたは64ビットJNIライブラリのJava
は、私が32ビットと64ビットのために利用可能であるJNIライブラリを必要としています。私はアプリケーションの2つの異なるバージョンを出荷する必要はないので、両方のライブラリでアプリケーションを出荷する必要があり、アプリケーションはロードするライブラリ(foobar32.soまたはfoobar64.so)を決定する必要があります。それ、どうやったら出来るの?
私は最初のものを読み込もうとしていましたが、例外がスローされた場合は2番目のものを読み込みますが、これは醜いと思います。
アプリケーションを実行するために32ビットのJavaまたは64ビットのJavaが使用されているかどうかを確認するためのシステムプロパティがありますか?私はいくつかのos.arch
プロパティがあることを知っていますが、戻り値はthis answerによればかなり予測できないようです。
32ビットまたは64ビットのJNIライブラリをロードするかどうかをアプリケーションに決定させる最も良い方法は何ですか?
アプリケーションをどのようにバンドルしていますか? OSGiでは、OSアーキテクチャに応じて、特定のバンドルまたはバンドル・フラグメントのみをロードできます。これは、プラットフォーム固有の機能がどのように提供されるかです。 OSGiの使用を検討できますか? – katsharp
あなたの主な関心事は、OSとは異なり実行可能なものです:64ビットOS上で32ビット実行可能ファイルを実行できますが、それでも32ビットであり、必要なライブラリは64ビットではない32ビットです。仮に32ビットOSでは、64ビットライブラリが必要です。これはprzemelekが説明しようとするものです。 'os.arch'はそれが存在する限り、事実上何かのために十分に良いでしょう、私の答えは、Unsafeがそこにあるかもしれないが、いくつかのシステムプロパティがそうでないケースをターゲットにしていました。 – bestsss