【问题标题】:Question about loading DLL (using JNA) inside an OSGi bundle关于在 OSGi 包中加载 DLL(使用 JNA)的问题
【发布时间】:2010-08-13 01:58:27
【问题描述】:

目前,我的包的根目录中有 DLL 文件 (rfid.dll;cpl.dll;rfidtx.dll;)。 我制作了一个实用程序包来保存 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'

那么,我该如何解决这个问题呢?我希望有人可以帮助我。

【问题讨论】:

标签: java osgi jna


【解决方案1】:

请参阅this 现有问题以获得深入的解释。 JNA 不支持 OSGi,它本身使用本机代码来加载库。显然,您可以预加载本机库(让 OSGi 完成工作,因为它应该),然后将满足 JNA 的本机钩子。然后,您应该能够通过您的服务使用 JNA 公开的 API。如果可行,请报告 - 我已经非常成功地将“常规”JNI 与 OSGi 一起使用,并且还曾短暂尝试使用 JNA,但由于它自己的加载程序钩子而无处可去。

【讨论】:

  • 这是一个很好的建议,并且可能是使 JNA 与 p2 更新机制一起工作的唯一方法。
猜你喜欢
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
相关资源
最近更新 更多