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 重に確認しました。
私は何を間違っていますか?