java.* 库如何实现 Java 本机接口以使用本机方法及其功能?
How does java.* libraries implement the Java native interface to use native methods and it's functionalities?
我想知道 java.*
库是如何实现 java native interface
的?
更具体地说,我正在调查 java.awt.Robot
并遇到本地方法调用。正如我在 windows - 这是否意味着有一个 .cpp
文件放置在某个地方(在 java.awt.*
包内?) - java.awt.Robot
使用?
无论何时调用本机代码,都必须通过 JNI。通常,您需要构建共享库。调用模式如下(请注意,您不调用 C 文件 - 它只是将调用哪个方法的可视化):
因此,从某种意义上说,有一个文件包含您调用的库的源代码。
在 Windows 的情况下,共享库是 DLL
个文件,在 Linux 的情况下,它们通常是 so
个文件,在 macOS dylib
中。如果你想让它们 "visible" 成为你的 Java 代码,你在这里没有什么选择。您可以将位置(库所在的目录)放在:
PATH
(windows)
LD_LIBRARY_PATH
(macOS/Linux)
-Djava.library.path
- 适用于所有系统,它只是一个 jvm 的参数。
我想知道 java.*
库是如何实现 java native interface
的?
更具体地说,我正在调查 java.awt.Robot
并遇到本地方法调用。正如我在 windows - 这是否意味着有一个 .cpp
文件放置在某个地方(在 java.awt.*
包内?) - java.awt.Robot
使用?
无论何时调用本机代码,都必须通过 JNI。通常,您需要构建共享库。调用模式如下(请注意,您不调用 C 文件 - 它只是将调用哪个方法的可视化):
因此,从某种意义上说,有一个文件包含您调用的库的源代码。
在 Windows 的情况下,共享库是 DLL
个文件,在 Linux 的情况下,它们通常是 so
个文件,在 macOS dylib
中。如果你想让它们 "visible" 成为你的 Java 代码,你在这里没有什么选择。您可以将位置(库所在的目录)放在:
PATH
(windows)LD_LIBRARY_PATH
(macOS/Linux)-Djava.library.path
- 适用于所有系统,它只是一个 jvm 的参数。