0

私は単純な「Hello World」プログラムを Java と Linux 用の JNI で書いています。JNI を使用するのが正しい場合は、すべてのプラットフォーム用の共有ライブラリをコンパイルする必要があります (Linux の場合は *.so、Windows の場合は *.dll など)。 *.jar ファイルの近くに置き、適切に実行するためのスクリプトを記述します (例: java -jar -Djava.library.path=. your_app.jar)。プラットフォームの相互依存性のためにJavaを選択したので、これはちょっと悲しいです。もちろん、Windows と Mac でまったく同じライブラリを構築することは大したことではありませんが、最初は、Java のプラットフォーム非依存性と C の速度を 1 つの .jar ファイルで組み合わせる特効薬のような JNI について考えます。

多分私は何か間違っていると思いますが、それを行う方法はありますか?

4

3 に答える 3

2

JNI = Javaネイティブインターフェイス。ネイティブ = プラットフォームに依存。JNI はオプションであり、Java の非常に特殊な部分です。Java コーディングに使用する必要はありません。JNI は、JVM では絶対に実行できない分離されたタスクに使用することを意図しています。速度の理由ではなく、ネイティブ (OS レベル) リソース/インターフェース、またはサードパーティのネイティブ (非 JVM) モノリシック ライブラリにアクセスするためです。「より良い速度」のためにJNIを使​​用し、実際にその違いが重要であると予想すると、おそらく別のツールを一緒に使用する必要があることが示唆されます.

于 2012-06-29T08:58:31.447 に答える
2

Java はほとんどプラットフォームに依存せず、JNI は大きな例外です...

于 2012-06-29T08:17:17.813 に答える
1

ターゲットとするプラットフォームごとに異なるバージョンのネイティブ ライブラリを提供する必要があります。そうです、ある意味で、JNI を使用するとプラットフォームの移植性が失われます。

正確な問題はわかりませんが、パフォーマンス上の理由からネイティブ コードが本当に重要かどうかを評価します。私の意見では、Java は時々議論されるほど遅くはありません。

于 2012-06-29T08:18:11.183 に答える