我正在尝试使用 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 指令。
我究竟做错了什么?