4

ネイティブ ライブラリが OSGi バンドルに登録されている場合は、次のBundle-NativeCodeヘッダーを使用します。

libjnotify.so;osname = Linux;processor = x86

これにより、libjnotify.soJava VM が x86 Linux 環境で実行されている場合にライブラリを使用できるようになります。

可能なプロセッサー・アーキテクチャーは、OSGi Web サイトにリストされています。ただし、これは新しい OS やプロセッサ アーキテクチャには対応していません。さらに、プロセッサ アーキテクチャだけでは不十分な環境はカバーしていません。

後者の例として、ARM 環境を考えてみましょう。OSGi は ARM_le と ARM_be を提供してくれますが、これだけでは不十分だと理解しています。ARM アーキテクチャの異なるバージョン (ARMv6、ARMv7 など) は、エンディアンに関係なく、バイナリ互換ではありません。さらに、FPU を備えた ARM アーキテクチャは、「ソフト フロート」(armel) または「ハード フロート」(armhf) ABI のいずれかを使用する OS を実行できます。ハード フロート用にコンパイルされたライブラリは、ソフト フロート システムでは実行できません。

では、これらのより複雑な環境では、ネイティブ コードをどのようにロードすればよいのでしょうか?

4

1 に答える 1

4

Java の起動時にシステム プロパティを設定して、OS 名とプロセッサを定義できます。

-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で概説されているように、新しい OS とプロセッサの名前を OSGi に送信できます。

于 2013-06-21T14:28:21.310 に答える