[英]A few questions about loading libraries and native methods in Java
我试图理解为什么我的代码在不同的操作系统中运行时挂起的部分尝试,我不得不调试不同的 eclipse 插件。 我在一些 Java 文件中看到了以下代码:
Library.loadLibrary("swt")
基于什么是 Java 中的本机方法以及应该在哪里使用它们? ,我知道本机方法用于执行用不同编程语言编写的函数。 但我有两个问题:
"swt"
调用loadLibrary
时,实际发生了什么? loadLibrary
在哪里寻找 SWT 库,我该如何更改它? Linux中获取库的等效命令是什么(我猜它是一些共享库)? public static final native void _gtk_widget_destroy(long /*int*/ widget);
public static final void gtk_widget_destroy(long /*int*/ widget) {
lock.lock();
try {
_gtk_widget_destroy(widget);
} finally {
lock.unlock();
}
}
_gtk_widget_destroy
方法是本机的。 这是否意味着在另一种语言(可能是 C)中存在一种称为_gtk_widget_destroy
的方法? 我怎么知道这个方法来自哪个库(可能是 SWT)?
System.loadLibrary("X")
使用System#mapLibraryName
来构造实际的库名称。 在 Linux 上是libX.so
,在 Mac 上是libX.dylib
,在 Windows 上是libX.dll
。
然后它在java.library.path
(VM 属性)的每个条目中搜索具有该名称的库。
对于第二个问题:您还需要周围类的完整命名空间和类名。 快速搜索告诉我该方法的全名是org.eclipse.swt.internal.gtk.GTK#_gtk_widget_destroy
。 现在,有两种选择:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.