gpt4 book ai didi

dependencies - Osgi 不会匹配包内的 native 代码

转载 作者:行者123 更新时间:2023-12-04 00:56:46 24 4
gpt4 key购买 nike

我正在尝试使用具有 native 代码依赖性的某个 Eclipse 插件。这些依赖项总是无法解决,所以这个插件永远不会被 OSGI 加载。

list 文件

    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。我尝试了许多不同的方法来尝试加载 native ,但没有成功。

如何让 OSGI 加载 native 库?我在 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

最佳答案

就我而言,在将 JRE 从 1.8.0.5 更新到 1.8.0.162 后,有一个 RCP 应用程序因 DLL 上的 UnsatisfiedLinkError 而停止。经过一番搜索,发现有两个bug,one in Java , 和 one in OSGi ,在 Windows 10 下的 Bundle-NativeCode 指令中使用 win32 别名时相互抵消。 它在更新之前工作的原因是,Java 将回退到默认值,以防它不知道 Windows 返回的版本. OSGi 知道该回退,并且 matched with the win32 alias .
现在更新 Java 意味着不再使用默认值,而是使用“Windows 10”。然而,OSGi 的 pre-Luna 版本不知道 Windows 10,因此没有将它与 win32 别名匹配。

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

-Dorg.osgi.framework.os.name=win32

大多数情况下更好的解决方案是将 OSGi 更新到至少 3.10.0。

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

关于dependencies - Osgi 不会匹配包内的 native 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com