2017-10-01 5 views
0

java.*ライブラリがjava native interfaceをどのように実装しているのだろうか?java。*ライブラリはネイティブメソッドとその機能を使用するためにJavaネイティブインタフェースをどのように実装していますか?

より具体的には、私はjava.awt.Robotを調査しており、ネイティブメソッド呼び出しに遭遇しています。私が窓の上にいるように、.cppファイル(java.awt.*パッケージの中にあります)があります - java.awt.Robotが使用していますか?

+0

いいえ、.cppファイル(おそらく)があり、Javaランタイムに付属するdllにコンパイルされたことを意味します。 –

+1

あなたのJREの "bin"フォルダにある "awt.dll"というファイルがあります。 –

+0

これについてはhttps://en.wikipedia.org/wiki/Java_AWT_Native_Interface –

答えて

0

ネイティブコードを呼び出すたびに、JNIを経由する必要があります。通常、共有ライブラリを構築する必要があります。スキーマを呼び出すと、(あなたがCファイルを呼び出すことはありませんのでご注意 - それは、メソッドが呼び出されますそのちょうど可視化です)、次のとおりです。

enter image description here

ので、ある意味で、ソースコードを含むファイルがありますあなたが呼ぶライブラリ。

Windowsの場合、共有ライブラリはDLLで、Linuxの場合は通常so個のファイルとmacOS dylibです。 Javaコードに対してそれらを「可視」にしたい場合は、ここにいくつかのオプションがあります。あなたには場所(ライブラリがあるディレクトリ)を置くことができます。

  • PATH(窓)
  • LD_LIBRARY_PATH(MacOSの/ Linuxの)
  • -Djava.library.path - 、それだけで、JVMの引数すべてのシステムのための作業です。
+0

で読むことができます。「nm」とは何ですか? - "nmはライブラリ内にこのシンボルを表示します" - ? – lelelo

+0

nmは、共有ライブラリ内のすべてのシンボルを表示するLinux/macOSのコマンドです。私はあなたのベストに合ったものを見つける必要があると思います。例:https://stackoverflow.com/questions/437432/is-there-a-way-to-find-all-the-functions-exposed-by-a-dll – mko

関連する問題