なぜ私はそれが必要なのか尋ねないでください。私はlibjnitester.soにあるネイティブメソッドを持っています。 libjnitester.soはlibcall.soに依存します(libsは実際のものをシミュレートします)。ネイティブメソッドを呼び出す前に、ディレクトリにlibsを動的にインストールする必要があります。私はFile.mkdrisでディレクトリを作成し、tarを呼び出してそのディレクトリにtar.gzを展開します(私はtarプロセスの完了を待っているので、JNIメソッドを呼び出すときにファイルが確実に存在します)。メソッドを呼び出すとき、私は取得しています:.so my .soが依存するディレクトリが存在しない場合のJNIエラー
java.lang.UnsatisfiedLinkError: /.../libjnitester.so: libcall.so: cannot open shared object file: No such file or directory
私は-Djava.library.path
を指定し、LD_LIBRARY_PATH
が定義されています。私は問題があると仮定しますLD_LIBRARY_PATH -
私はJVMを開始したときにディレクトリが存在しなかったとして、実行中にのみ作成されている、それは無視されます。ディレクトリ(.soファイルなし)をあらかじめ作成しておけば、JVMはすべて正常に動作します。
質問 - どうすれば私のJNIメソッドとそれが依存する.soファイルを新しいディレクトリに動的にインストールできますか?
OKこれは不可能なようですが、これは私が疑っています:http://stackoverflow.com/questions/5838092/java-load-a-library-that-depends-on-other-libs http: //stackoverflow.com/questions/856116/changing-ld-library-path-at-runtime-for-ctypes –