ネイティブ ライブラリと JNI ライブラリを単一の JAR ファイルにバンドルするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-12 02:02:01
オリジナル
754 人が閲覧しました

How Can You Bundle Native and JNI Libraries in a Single JAR File?

ネイティブ ライブラリと JNI ライブラリを JAR にバンドルする

最近、開発者は、ネイティブ ライブラリを含む複数の依存関係を JAR 内に統合する手段を模索しました。単一の JAR ファイル。この戦略は、配布を簡素化し、再配布の問題を減らすことを目的としています。

ネイティブ ライブラリの難題

この取り組みで遭遇した課題の 1 つは、実際のネイティブ ライブラリを含めることでした。 JNI ライブラリのみに焦点を当てた既存の試みとして。さらに、以前のソリューションは特定のネイティブ依存関係プラグイン向けに調整されているようで、一般的な再配布には適していない可能性があります。

包括的なソリューション

推奨されるアプローチには、 System.load(File) は、java.library.path システム プロパティに依存する従来の System.loadLibrary(String) の代わりにライブラリをロードします。この方法では、ユーザーがライブラリを手動でインストールする必要がなくなりますが、JAR が必要なライブラリをすべてカプセル化していない場合、プラットフォーム間の移植性が損なわれる可能性があります。

実装プロセス

  1. ネイティブ JNI ライブラリをプラットフォーム固有の場所 (例: NATIVE/${os.arch}/${os.name}/libname.lib) にある JAR に組み込みます。
  2. コードを実装します。メインクラスの静的初期化子で次のようにします。

    • 現在の os.arch と os.name を決定します。
    • Class.getResource( を使用して、事前定義されたパスにある JAR 内のライブラリを検索します。 String).
    • ライブラリが存在する場合は、それを一時ファイルに抽出し、System.load(File) でロードします。

ケーススタディ: jzmq

このソリューションは、ZeroMQ の Java バインディングである jzmq で採用されており、埋め込みバージョンをロードできない場合、ハイブリッド機能により java.library.path に沿ってライブラリを検索するフォールバックが可能です。 .

以上がネイティブ ライブラリと JNI ライブラリを単一の JAR ファイルにバンドルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート