2010-08-13 81 views
1

目前,我在我的包的根目錄下有DLL文件(rfid.dll; cpl.dll; rfidtx.dll;)。 我製作一個Utility Bundle來保存jna.jar,並將com.sun.jna,com.sun.jna.ptr導出爲服務。關於在OSGi包內加載DLL(使用JNA)的問題

的清單有問題的包看起來是這樣的:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: ServiceImpl 
Bundle-SymbolicName: osgi.mti.serviceImpl 
Bundle-Version: 1.0.0.qualifier 
Bundle-Vendor: ZTESOFT 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
Import-Package: osgi.mti.service, 
org.osgi.service.component;version="1.1.0", 
com.sun.jna, 
com.sun.jna.ptr 
Service-Component: OSGI-INF/component.xml 
Bundle-NativeCode: rfid.dll;cpl.dll;rfidtx.dll; 
osname=WindowsXP; 
processor=x86 

在我的代碼中,JNA接口被聲明爲:

public interface CLibrary extends Library { 

    CLibrary INSTANCE = (CLibrary) Native.loadLibrary("rfid", 
      CLibrary.class); 
    ............ 

} 

當我運行有顯示的一些異常消息。根異常是:

java.lang.UnsatisfiedLinkError: Unable to load library 'rfid' 

那麼,我該如何解決這個問題呢?我希望有一個人可以幫助我。

+1

我問完全相同的問題,有一個簡單的答案:[在OSGi包中加載DLL(使用JNA)](http://stackoverflow.com/questions/1375550/load-dll-using-jna-inside- an-osgi-bundle) – 2010-08-22 15:42:02

回答

1

請參閱this現有問題的深入解釋。 JNA不支持OSGi,本身使用本地代碼來加載庫。顯然,你可以預先加載本地庫(讓OSGi完成工作,因爲它應該),這將滿足JNA的原生鉤子。然後,您應該能夠通過您的服務使用JNA公開的API。如果這能起作用,請報告回來 - 我已經非常成功地使用了OSGi的「常規」JNI,並且簡單地嘗試了使用JNA,但由於它自己的裝載器鉤子而沒有得到任何幫助。

+0

這是一個很好的建議,也可能是使JNA與p2更新機制一起工作的唯一方法。 – 2014-02-14 09:42:45