0

こんにちは、ネイティブ プログラムを呼び出さなければならない Java プログラムがあります。このネイティブ プログラムは 2 つの so ファイルによって提供されます。そこで、このネイティブ プログラム API を使用して Java プログラムで何かを行うために、so ファイルを作成します。2つのsoファイルを作成したsoファイルと1つにマージし、Javaプログラムを実行しようとしていました。しかし、この方法では失敗したようです。より具体的に言うと、これが私の例です。

ネイティブコードを呼び出す必要があるJavaプログラムAがあります。したがって、私はいくつかのネイティブ コードを作成し、それを共有ライブラリ (C.so と呼ばれます) としてビルドしました。

残念ながら、私が書いたネイティブ コードは、他の so ファイルにある他のコードを使用する必要があります。(A.so、B.so)

したがって、Javaプログラムを機能させるために、A.soおよびB.soでsoファイルをコンパイルする方法はありますか?

4

1 に答える 1

0

私は次のことを想定しています:

  • c.so をリンクすると、コマンド ラインに a.so と b.so がリストされます。
  • c.so で ldd を実行すると、a.so と b.so が表示されます。
  • 実行するときは、-Djava.library.path を設定して、3 つすべてを含むディレクトリを含めます。
  • 実行するとき、LD_LIBRARY_PATH を設定して、3 つすべてを含むディレクトリを含めません。

ライブラリを含むディレクトリを含めるように LD_LIBRARY_PATH 環境変数を設定すると、目的の結果が得られます。

詳細な説明と別の方法については、https://github.com/bimargulies/jni-origin-testbedを参照してください。

于 2012-04-20T12:08:17.553 に答える