我想從OSGI包中的DLL中使用方法。該DLL在OSGI中正確加載,但我仍然得到一個java不滿意的鏈接錯誤,找不到本地方法!OSGI無法在運行時通過JNI鏈接到本機方法
當在Java中獨立部署(無OSGI)時,DLL將被加載並完美運行。
這裏就是我所做的:
- 我產生了JNI橋到我的C++通過SWIG編譯DLL。
- 我在調用swig時指定了包名。
- 我在我的Maven pom.xml xml元素中聲明瞭dll包含,它生成了一個正確的Manifest文件。
java.lang.UnsatisfiedLinkError: com.bmw.corona.components.sample.impl.generated.AdasDeconstructorJNI.swig_module_init()V
的問題是耦合時:
- 加載DLL庫是沒有任何錯誤/警告
什麼真正困擾我的是,在DLL中的符號似乎無法找到做它與OSGI,我猜在OSGI的ClassLoader的某處。
DLL中的方法似乎有一個正確的簽名:
_Java_com_bmw_corona_component[email protected]8
與生成的SWIG文件的原型如下:
SWIGEXPORT void JNICALL Java_AdasDeconstructorJNI_swig_1module_1init(JNIEnv *jenv, jclass jcls)
我三請務必檢查Manifest包含Bundle Native指令。
我在做什麼錯?
你確定你有一個bundle本地頭......但不願意向我們展示它的外觀? ;-) –