OSGi的找不到我的DLL文件,我似乎无法找出原因。
目前,我有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接口I进行调用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
我有JNA经由另一束(其中出口com.sun.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
被后来称为)。 看来我应该能够避免基于清单捆NativeCode指令这一呼吁。 显然,一旦库被加载Native.loadLibrary抓住它的现有实例,但我不希望依靠这种非常具体的订单策略。
static{
System.loadLibrary("foo");
}