4

在 OSGi 包中注册本机库时,您可以使用Bundle-NativeCode标头:

libjnotify.so;osname = Linux;processor = x86

如果 Java VM 在 x86 Linux 环境中执行,这将使该libjnotify.so库可用。

OSGi 网站上列出了可能的处理器架构。但是,这不包括新的操作系统或处理器架构。此外,它不包括仅靠处理器架构还不够的环境。

对于后一种情况的示例,请考虑 ARM 环境。OSGi 为我们提供了 ARM_le 和 ARM_be,但我的理解是这还不够。不同版本的 ARM 架构(ARMv6、ARMv7 等),无论字节顺序如何,都不是二进制兼容的。此外,带有 FPU 的 ARM 架构可以运行使用“软浮点”(armel) 或“硬浮点”(armhf) ABI 的操作系统。为硬浮点编译的库不能在软浮点系统上运行,反之亦然。

那么在这些比较复杂的环境中,原生代码应该如何加载呢?

4

1 回答 1

4

您可以在启动 Java 时设置系统属性以定义操作系统名称和处理器:

-Dorg.osgi.framework.processor=my_processor_name -Dorg.osgi.framework.os.name=my_os_name

请参阅 Core R5 规范中的第 4.5.3 节。

然后,您可以在 Bundle-NativeCode 标头中引用这些名称。

此外,您可以按照http://www.osgi.org/Specifications/Reference上的概述向 OSGi 提交新的操作系统和处理器名称。

于 2013-06-21T14:28:21.310 回答