目前我在我的捆绑包的根目录下有DLL文件(rfid.dll; cpl.dll; rfidtx.dll;)。 我创建了一个Utility Bundle来保存jna.jar,并将com.sun.jna,com.sun.jna.ptr导出为服务。
有问题的捆绑包的清单看起来像这样:
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'
那么,我该如何解决这个问题呢?我希望有人可以帮助我。
答案 0 :(得分:1)
有关详细说明,请参阅this现有问题。 JNA不支持OSGi,它本身使用本机代码来加载库。显然你可以预加载本机库(让OSGi做它应该的工作),这将满足JNA的本机钩子。然后,您应该能够通过您的服务使用暴露于JNA的API。请报告这是否有效 - 我已经非常成功地将“常规”JNI与OSGi一起使用,并且还试图使用JNA,但由于它自己的加载程序钩子而无处可去。