【问题标题】:How does java.* libraries implement the Java native interface to use native methods and it's functionalities?java.* 库如何实现 Java 本机接口以使用本机方法及其功能?
【发布时间】:2017-10-01 18:05:33
【问题描述】:

我想知道java.* 库是如何实现java native interface 的?

更具体地说,我正在调查java.awt.Robot 并遇到本机方法调用。当我在 Windows 中时 - 这是否意味着在某处(在 java.awt.* 包内?)有一个 .cpp 文件 - java.awt.Robot 使用?

【问题讨论】:

  • 不,这意味着有一个 .cpp 文件(很可能)并且它被编译成 Java 运行时附带的 dll。
  • 而且很可能是 JRE 的“bin”文件夹中的文件“awt.dll”。
  • 您可以在en.wikipedia.org/wiki/Java_AWT_Native_Interface阅读有关此内容的信息

标签: java java-native-interface native


【解决方案1】:

无论何时调用本机代码,都必须通过 JNI。通常,您需要构建共享库。调用模式如下(请注意,您不调用 C 文件 - 它只是将调用哪个方法的可视化):

因此,从某种意义上说,存在一个包含您调用的库的源代码的文件。

对于 Windows,共享库是 DLL 文件,对于 Linux,它们通常是 so 文件,在 macOS 中是 dylib。如果您想让它们对您的 Java 代码“可见”,那么您在这里几乎没有选择。您可以将位置(库所在的目录)放在:

  • PATH(窗口)
  • LD_LIBRARY_PATH (macOS/Linux)
  • -Djava.library.path - 适用于所有系统,这只是 jvm 的参数。

【讨论】:

  • 什么是“纳米”? - "nm 将在库中显示此符号" -?
  • nm 是 Linux/macOS 中的一个命令,用于显示共享库中的所有符号。我想,你需要找到最适合你的东西。例如:stackoverflow.com/questions/437432/…
猜你喜欢
  • 2022-10-19
  • 2021-11-20
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多