通过更具体的处理器体系结构过滤器在OSGi包中加载本机代码

时间:2013-06-21 09:30:36

标签: osgi native

在OSGi包中注册本机库时,使用Bundle-NativeCode标题:

libjnotify.so;osname = Linux;processor = x86

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

The possible processor architectures are listed on the OSGi website。但是,这并不包括新的操作系统或处理器体系结构。此外,它并不涵盖仅仅处理器架构不够的环境。

有关后一种情况的示例,请考虑ARM环境。 OSGi为我们提供了ARM_le和ARM_be,但我的理解是这还不够。不管字节顺序如何,ARM体系结构的不同版本(ARMv6,ARMv7等)都不是二进制兼容的。此外,具有FPU的ARM体系结构可以运行使用'软浮动' (阿梅尔)或“硬浮”#39; (armhf)ABI。为硬浮点数编译的库不能在软浮点系统上运行,反之亦然。

所以在这些更复杂的环境中,如何加载本机代码?

1 个答案:

答案 0 :(得分: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提交新的操作系统和处理器名称。