jna java包_java – 在OSGi包中加载DLL(使用JNA)

OSGi找不到我的DLL文件,我似乎无法弄清楚原因.

目前我在我的bundle的根目录下有DLL文件(foo.dll),我也试过在libs目录下使用它.

有问题的捆绑的清单看起来像这样:

Manifest-Version: 1.0

Bundle-ManifestVersion: 2

Bundle-Name: foobundle

Bundle-SymbolicName: com.foo.bar

Bundle-Version: 1.0.0

Bundle-Vendor: me

Import-Package: com.sun.jna,

com.sun.jna.ptr,

com.sun.jna.win32

Export-Package: com.foo.bar

Bundle-NativeCode: foo.dll;

osname=WindowsXP;

processor=x86

然后在我的JNA界面中执行loadLibrary(根据文档):

public interface MyFooInterface extends com.sun.jna.Library{

static final MyFooInterface INSTANCE = (MyFooInterface)com.sun.jna.Native.loadLibrary("foo", MyFooInterface .class);

// specific interface defs here...

}

然后在另一个类中我尝试使用JNA接口

// ...code

int var = MyFooInterface.INSTANCE.bar();

// ...more code

我通过另一个包(它导出com.sun.jna和上面导入的其他包)提供了JNA,但是也尝试使用此处定义的包打包它(并在这种情况下将其添加到类路径中等).

我也尝试过指定Bundle-NativeCode:/foo.dll.

同样感兴趣的是,这些是相关的OSGi属性(我使用getprop提取)

org.osgi.framework.os.name=WindowsXP

org.osgi.framework.processor=x86

即使在所有这些(以及我做的每一次试验)之后,我总是会遇到以下错误(并且未显示堆栈跟踪):

java.lang.UnsatisfiedLinkError: Unable to load library 'foo': The specified module could not be found.

……所以我错过了什么?

编辑:我还应该注意,我已经测试并成功了JNA接口代码和它作为JUnit测试程序的一部分进行对话的DLL.

编辑2:将此代码添加到调用库的类似乎允许JNA查找库(稍后调用Native.loadLibrary时).看来我应该能够根据Manifest中的Bundle-NativeCode指令来避免这个调用.很明显,一旦加载了库,Native.loadLibrary会抓取它的现有实例,但我宁愿不依赖于这个特定于订单的策略.

static{

System.loadLibrary("foo");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值