我正在尝试使用具有本机代码依赖性的某个Eclipse插件。这些依赖项总是无法解决,所以这个插件永远不会被OSGI加载。
MANIFEST.MF
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: PROS Cortex Flash Utility
Bundle-SymbolicName: com.purduesigbots.vexflash; singleton:=true
Bundle-Version: 1.0.0.6
Bundle-Activator: com.purduesigbots.vexflash.Activator
Bundle-Vendor: Purdue ACM SIG BOTS
Require-Bundle: org.eclipse.ui,org.eclipse.core.runtime,org.eclipse.co
re.resources,org.eclipse.ui.ide;bundle-version="3.7.0",org.eclipse.de
bug.ui;bundle-version="3.7.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Bundle-NativeCode:
/libs/windows/jSSC-2.6_x86_64.dll;
osname=win32; processor=x86_64, *
Bundle-ClassPath: .,jna.jar,platform.jar
dll的路径是包jar内的/libs/windows/jSSC-2.6_x86_64.dll。我试过很多不同的事情试图让本地人加载,但没有成功。
如何让OSGI加载本机库?我在Windows 10上运行JRE 8 64位。
编辑:
我这样修改了MANIFEST.MF以使其正常工作
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: PROS Cortex Flash Utility
Bundle-SymbolicName: com.purduesigbots.vexflash; singleton:=true
Bundle-Version: 1.0.0.6
Bundle-Activator: com.purduesigbots.vexflash.Activator
Bundle-Vendor: Purdue ACM SIG BOTS
Require-Bundle: org.eclipse.ui,org.eclipse.core.runtime,org.eclipse.co
re.resources,org.eclipse.ui.ide;bundle-version="3.7.0",org.eclipse.de
bug.ui;bundle-version="3.7.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Bundle-NativeCode:
#The OS name is not in OS aliases for OSGI, so the full name must be used
/libs/windows/jSSC-2.6_x86_64.dll;
osname=win32; osname="Windows 10"; processor=x86_64
Bundle-ClassPath: .,jna.jar,platform.jar
答案 0 :(得分:1)
在我的情况下,在将JRE从1.8.0.5更新到1.8.0.162之后,有一个RCP应用程序在DLL上停止了 UnsatisfiedLinkError 。经过一些搜索后,我发现有两个错误one in Java和one in OSGi在 Bundle-NativeCode中使用 win32 别名时互相取消Windows 10下的指令。在更新之前它的工作原理是,如果Java不知道Windows返回的版本,它将回退到默认值。 OSGi和matched with the win32 alias都知道这种后退。 现在更新Java意味着不再使用默认值,而是使用“Windows 10”。但是,前Luna版本的OSGi不知道Windows 10,因此与win32别名不匹配。
我使用的解决方法是相应地覆盖 org.osgi.framework.os.name 属性,这是可行的,因为该应用程序没有其他目标:
-Dorg.osgi.framework.os.name=win32
在大多数情况下,更好的解决方案是将OSGi更新到至少3.10.0。
当然,将“Windows 10”作为附加的 os.name 添加到作者的Manifest中,也可以。我决定不这样做,因为我在依赖项中有几个这样的原生二进制文件,这些文件不在我的控制之下。