6

バックグラウンド

そのため、実行時にMac OS X上のJavaにjnilib(具体的にはJOGL )をロードしようとしています。私は関連するStackOverflowの質問に沿ってフォローしています:

私の最終的な目標は、プラットフォーム固有のJOGLファイルをJARにパッケージ化し、一時ディレクトリに解凍して、起動時にロードすることです。私は問題を解決して、ハードコードされたパスを使用してJOGLをロードしようとしただけでした。

    File f = new File("/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/libjogl.jnilib");
    System.load(f.toString());
    f = new File ("/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/libjogl_awt.jnilib");
    System.load(f.toString());

JOGL APIを使用しようとすると、次の例外が発生します。

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no jogl in java.library.path

しかしjava.library.path、次のJVMオプションを追加して指定すると:

    -Djava.library.path="/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/" 

すべてが正常に動作します。


質問

System.load実行時に呼び出される-Djava.library.pathの代わりに、Mac OS Xで(または他のバリアントを)使用することは可能ですか?

4

3 に答える 3

2

java.library.path起動時に提供する必要はありません。プログラムで設定できます

System.setProperty("java.library.path", "/var/folder/bla/foo/bar/");

System.load()このライブラリパスがなくても、どういうわけか機能するかどうかはわかりません。

于 2010-03-31T11:38:10.657 に答える
1

Joglは、常にすべての依存ライブラリを自動ロードしようとします。これを回避するには、System.load()を介してライブラリを自分でロードする前に、disableLoading()を呼び出すことができるNativeLibLoaderクラスが必要です。

于 2010-04-03T22:27:16.853 に答える
-3

System.load(...)libraryNameを引数として取ります。引数としてライブラリへのパスを取りません。JVMは、で指定されたパスのリストで指定された名前のライブラリを検索します。-Djava.library.path;

ここでは、MacOSXに固有のものはありません。すべてのオペレーティングシステムで同じ方法でライブラリを検索します。

于 2010-03-31T07:50:44.713 に答える