2017-01-06 6 views
0

本質的に、問題はこれです。私はJNIライブラリをロードするJavaプログラムを持っています。そのJNIライブラリをHotSpotのlibjvm.so共有ライブラリにリンクすることができます。それに応じてHotSpot固有の関数、つまりjni.hの外部の関数を呼び出すことはできますか?私が試してみて、簡単な方法で行うとJNIコードとJVMのリンク

、結果はとクラッシュするプログラムです:

java: symbol lookup error: /path/to/libtest.so: undefined symbol: _ZNK7oopDesc5klassEv

それがホットスポット固有を解決できないので、これはロードに失敗の外観を与えますoopDescクラス。このような方法でリンクできる図書館を作るための提案はありますか?

編集:また、コンパイル時にlibjava.soにリンクしてみましたが、成功しませんでした。

答えて

0

ロードするlibjvm.soが、java EXEによって暗黙的にリンクされているlibjvm.soと異なる場合、これは動作しません。これは、tricktrick。あなたのライブラリが参照したいのと同じlibjvm.soをロードしているJava EXEはありますか? hereのようにjava EXEによってどの.soがロードされているかを知ることができるはずです。

java EXEとあなたのライブラリの両方が同じ.soを望んでいて、まだ動作していない場合、私は何を言いたいのか分かりません。

+0

ありがとう、私はこれをテストしましたが、それは問題ではありませんでした。まったく同じライブラリにリンクしていても依然として発生します。 – 0x277F

+0

これは関連する可能性がありますか? https://bugs.openjdk.java.net/browse/JDK-8037962 – Wheezil

関連する問題