1

OSGI バンドルの DLL のメソッドを使用しようとしています。DLL は OSGI に正しくロードされますが、それでも Java unsatisfied link エラーが発生します。ネイティブ メソッドが見つかりません!

スタンドアロンで Java のみ (OSGI なし) に展開すると、DLL が読み込まれ、完全に実行されます。

これが私がしたことです:

  • SWIG を使用して、C++ でコンパイルした DLL への JNI ブリッジを生成しました。
  • swigの呼び出し時にパッケージ名を指定しました。
  • Maven pom.xml xml 要素に dll を含めることを宣言しました。これにより、正しいマニフェスト ファイルが生成されます。
  • DLL ライブラリの読み込みは、エラーや警告なしで行われます

本当に困惑しているのは、dll 内のシンボルが見つからないように見えることです。

java.lang.UnsatisfiedLinkError: com.bmw.corona.components.sample.impl.generated.AdasDeconstructorJNI.swig_module_init()V

問題は、OSGI と結合するときです。OSGI の ClassLoader のどこかにあると思います。

dll のメソッドは正しい署名を持っているようです:

_Java_com_bmw_corona_components_sample_impl_generated_AdasDeconstructorJNI_swig_1module_1init@8

生成された SWIG ファイルで次のプロトタイプを使用します。

SWIGEXPORT void JNICALL Java_AdasDeconstructorJNI_swig_1module_1init(JNIEnv *jenv, jclass jcls)

マニフェストに Bundle Native 命令が含まれていることを 3 重に確認しました。

私は何を間違っていますか?

4

2 に答える 2

0

次の wiki 記事を参照してください: http://wiki.osgi.org/wiki/Dependencies_In_Native_Code

あなたの説明からはわかりにくいですが、2 つのネイティブ ライブラリがあるようです。1 つは JNI エントリ ポイントを使用し、もう 1 つは実際のネイティブ関数を使用します。上記の wiki 記事では、JNI ネイティブ ライブラリから他のネイティブ ライブラリへの依存関係について説明しています。

于 2013-05-17T21:43:16.393 に答える