2016-09-21 6 views
0

なぜ私はそれが必要なのか尋ねないでください。私は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ファイルを新しいディレクトリに動的にインストールできますか?

+0

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 –

答えて

0

ライブラリをインストールしたら、それぞれの.soファイルに対してSystem.load()を呼び出します。ライブラリを動的にロードする必要があります。この時点で、ネイティブメソッドを呼び出すことができるはずです。

関連する問題