在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。为硬浮点数编译的库不能在软浮点系统上运行,反之亦然。
所以在这些更复杂的环境中,如何加载本机代码?
答案 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提交新的操作系统和处理器名称。