2013-04-05 38 views
1

用於視頻編碼的負載包括C一個DLL ++代碼OSGi服務:java.lang.UnsatisfiedLinkError中調用DLL - 時稱爲單元測試DLL NO誤差

Unpacking debugging symbols for VideoSource.dll to \path 
Checking for VideoSource.pdb... 
Checking for videosource.pdb... 

,然後製成的Java類嘗試實例天然(C++)類:

// VideoSource() is implemented in C++ and wrapped with JNI, 
    // wrapper files were generated with SWIG 
    _videoProvider = new generated.VideoSource(); 

當Java類作爲JUnit測試(提取視頻數據)執行時,這起作用。

當我將Java類作爲OSGi服務啓動時,相同的東西不起作用。

基本上,執行相同的代碼。該DLL仍然加載成功,但高於現在顯示本機(C++)類的實例拋出異常:

java.lang.UnsatisfiedLinkError: generated.VideoSourceSWIGJNI.new_VideoSource()J 

當我啓動Java類作爲一個OSGi服務,而不是執行它作爲一個有什麼不同JUnit測試?我能做些什麼來使它工作?



背景
generated.VideoSource()是

public VideoSource() { 
     this(VideoSourceSWIGJNI.new_VideoSource(), true); 
    } 

VideoSourceSWIGJNI.new_VideoSource()是

public final static native long new_VideoSource(); 

C++實現

VideoSource::VideoSource() {  
    // init frame count 
    m_frame_cnt = 0; 
    [..] 
} 
+1

那麼,它不會因爲某些原因找到dll。你有沒有搜索過OSGi +本地庫?那裏有一些文件,AFAIK。你有什麼嘗試? – Puce 2013-04-05 13:27:07

回答

1

謝謝Puce推我一下。在問「我會不得不嘗試任何事情」?我相對答案很快就:

爲了用我自己的話,恢復源(1234):

當本機代碼,例如.so或.dll庫應該用在OSGi包中,相應的庫必須在包的清單中聲明。

清單文件可以被明確地編輯,如所提到的來源中所述,或者隱式地通過適當的插件(例如, apache felix,使用maven時。已使用的插件在POM文件中配置,並將自動修改清單。