JNI と Java:make を呼ぶのはアリですか、それとも make を呼ぶのはアリですか?

StackOverflow https://stackoverflow.com/questions/15305

質問

私はちょうど、プラットフォーム固有の C/C++ コードから Java にファイル システムの変更通知を提供するために、JNI (Java Native Interface) の世界に初めて足を踏み入れようとしているところです。それは、誰かがこれを行うための素晴らしいライブラリを提案していない限り、私はそれを見逃しました。

JNI を初めて使用するため、インターフェース側とライブラリ生成側については多くのドキュメントを見つけることができましたが、ネイティブ ライブラリの構築についてはあまり見つかりませんでした。

既存の Java ソースの ant に基づいた既存のビルドがあるため、ライブラリを作成するために ant に make を呼び出す必要があるのか​​、それとも作成後に make に ant を呼び出すのが最善なのかを検討中です。図書館?

どちらのオプションもそれほど優れているとは言えませんが、Ant にコンパイラを呼び出してコードをコンパイルし、ライブラリを直接生成させるよりはどちらも優れているように思えます。

役に立ちましたか?

解決

私は make の暗黙のルールセットと空白の扱いが非常に嫌いです。個人的には cpp タスクを使用します (http://ant-contrib.sourceforge.net/cpptasks/index.html) C コンパイルを実行します。これらは make ほど柔軟ではありませんが、はるかに複雑ではないため、開発者に make を学習させる負担を与える必要がありません。

他のヒント

JNI のより簡単な代替手段として、JNA を試してください。 https://jna.dev.java.net/, 、この面倒な作業を解決し、より簡単になる可能性があります(必要なことができると仮定して)。

私なら JNI を完全にスキップし、標準出力に通知を書き込む外部プログラムを使用します。Java はプログラムの出力ストリームから単純に読み取り、必要なイベントを生成できます。単純な通知を送信することだけを目的としている場合、JNI は多大な労力を要します。

また、Linux では、単に「inotifywait」を開始することもできます (いくつかの適切なパラメータを指定します。「man inotifywait」を参照)。

私も今似たようなことに取り組んでいます。swig.org の swig を使用すると、ネイティブ ライブラリへのスタブが生成されるため、多くの場合簡単であることに注意してください。

あなたの質問に対する簡単な答えは、ネイティブ ライブラリは Java クラス ファイルから生成される swig 生成ヘッダーに依存するため、Java ライブラリがすでに構築された後で ant ファイルが make ファイルを実行する必要があるということです。

Ant に非常に精通していて、新しいシステムを学びたくない場合は、 http://ant-contrib.sourceforge.net/cpptasks/index.html, も別の投稿者によってリンクされており、これを使用すると、ant で C++ をビルドできます。

次の場所で terp C++ タスクを試すこともできます。 コードメッシュ. 。これらは無料ではありませんが、C++ コンパイラを検出/指定する機能と、マルチプラットフォーム ビルド用に複数のコンパイラ/プロセッサ アーキテクチャ/コンパイラ構成を反復処理する機能と組み合わせた高レベルの抽象化を提供します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top