Dependencies Osgi将不匹配捆绑包中的本机代码

Dependencies Osgi将不匹配捆绑包中的本机代码,dependencies,osgi,unresolved-external,Dependencies,Osgi,Unresolved External,我正在尝试使用一个具有本机代码依赖性的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-

我正在尝试使用一个具有本机代码依赖性的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的路径是bundle 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

在我的例子中,有一个RCP应用程序在将JRE从1.8.0.5更新到1.8.0.162后,在DLL上出现一个不满意的链接错误而停止。经过一番搜索,我发现在Windows 10下使用Bundle NativeCode指令中的win32别名时,存在两个相互抵消的bug和。它在更新之前工作的原因是,如果Java不知道Windows返回的版本,它将返回默认版本。OSGi知道这一退路,并且。 现在更新Java意味着不再使用默认值,而是使用“Windows10”。但是,早于Luna的OSGi版本不知道Windows 10,因此与win32别名不匹配

我采用的解决方法是,相应地覆盖org.osgi.framework.os.name属性,这是可行的,因为该应用程序没有其他目标:

-Dorg.osgi.framework.os.name=win32
在大多数情况下,更好的解决方案是将OSGi更新到至少3.10.0


当然,与作者一样,将“Windows 10”作为附加os.name添加到清单中也同样有效。我决定不这样做,因为我在依赖项中有几个这样的本地二进制文件,它们不在我的控制之下。

所以包中有一个类,它被加载并初始化,它的静态初始化器是一个
System.loadLibrary(“jSSC-2.6_x86_64”)
?@BJHargrave我找到了它。我会马上更新这个问题。如果你已经弄明白了,最好在下面发布一个答案。这样的话,这些信息对那些在未来陷入同样困境的人来说是有用的。而将解决方案作为答案发布也会为你赢得一些积分!(谁能对互联网点说“不”?)根据Windows 10,现在days已将win32作为别名。