1

JNI が依存しているライブラリがあり、クラスパスに対して相対的にロードしたいのですが、可能ですか?

4

1 に答える 1

3

いいえclasspath、それは不可能です-ライブラリは.jnilib、JREが割り当てるものに基づいて定義されたOS検索パスをたどり、次にライブラリ自体が言及するものに従います。

を作成するときに.jnilib、リンカー フラグを追加して、ライブラリの「ローダー」パスに相対的な rpath を指定できます。これにより、依存ライブラリをそれ自体に隣接する場所に配置できるようになり.jnilib、同様の動作を実現できます。

libjni.jnilib: libjni.o
    $(CC) -o $@ $< -Wl,-rpath,@loader_path/../lib

重要な項目は-Wl,-rpath,@loader_path/../lib- の追加です。これは、リンカに@loader_path/../libの に追加するように指示rpathします.jnilib

値は、実行時@loader_pathにファイルの場所に解決されます。.jnilib

クラスパスに基づいて依存関係をロードする場合は、実際にはクラスパスに基づいてライブラリを自分で見つけ、明示的に jre を使用してそれらをロードするSystem.load()必要があります。モジュールは依存します。

于 2014-10-21T06:49:45.703 に答える