ホームページ  >  記事  >  Java  >  配布を簡略化するために、ネイティブ ライブラリと JNI ライブラリを JAR にパッケージ化できますか?

配布を簡略化するために、ネイティブ ライブラリと JNI ライブラリを JAR にパッケージ化できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-17 17:32:01269ブラウズ

Can Native and JNI Libraries Be Packaged Together in a JAR for Simplified Distribution?

ネイティブ ライブラリと JNI ライブラリを単一の JAR 内にカプセル化する

問題:

東京キャビネット ライブラリを JAR に変換することで配布を簡素化し、手動ライブラリの必要性を回避します再配布。現在利用可能なソリューションには、ネイティブ ライブラリを含めることと、その使用を特定のプラグインに制限するという制限があります。

解決策: ネイティブ ライブラリと JNI ライブラリを JAR に一緒にパッケージ化できますか?

はい、さまざまなプラットフォーム用のネイティブ JNI ライブラリを含む統合 JAR を作成することは可能です。 System.load(File) を使用すると、通常の System.loadLibrary(String) をバイパスして、システム レベルのライブラリをインストールする必要がなく、ライブラリをロードできます。 JAR には、サポートされているすべてのプラットフォームのライブラリが含まれていない可能性があるため、プラットフォームに互換性がない可能性があるという欠点があります。

プロセス:

  1. JAR アセンブリ: ネイティブ JNI ライブラリを JAR 内のプラットフォーム固有の場所に含めます。 "NATIVE/${os.arch}/${os.name}/libname.lib".
  2. 静的初期化: メイン クラス内に次の静的初期化子を実装します。

    • 現在の os.arch を決定し、 os.name
    • Class.getResource(String) を使用して JAR 内のライブラリを検索します
    • ライブラリを一時ファイルに抽出し、存在する場合は System.load(File) 経由でロードします

ハイブリッド解決策:

ハイブリッド アプローチを採用して、java.library.path に沿った組み込みライブラリの読み込みとシステム全体のライブラリ検索の両方を可能にすることができます。これにより、組み込みライブラリが利用できないプラットフォームとの互換性が確保されます。

実装例:

ZeroMQ の jzmq Java バインディングは、この機能を示しています。そのコードは [こちら] (jzmq コードへのリンク) で入手でき、プラットフォームの柔軟性を維持しながらシームレスな読み込みエクスペリエンスを提供します。

以上が配布を簡略化するために、ネイティブ ライブラリと JNI ライブラリを JAR にパッケージ化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。