JNI - 将自己的可执行文件指定为本机方法的源
JNI - Specify the own executable as source for native methods
我已经用 JNI_CreateJavaVM
启动了一个 Java 虚拟机。我希望我的 java 类 能够使用从启动 JNI_CreateJavaVM
.
的可执行文件导出的本地方法
在 google 结果周围,人们告诉您使用 System.loadLibrary
指定从哪个库导入本机方法。然而,做
public class someclass
{
static { System.loadLibrary("myExeName.exe"); }
}
将失败 FindClass
java.lang.UnsatisfiedLinkError: no myExeName. in java.library.path
(我添加了 -Djava.library.path=.
作为 JavaVMOption
)
似乎 Java 切断了扩展名,这令人失望,因为 win32 LoadLibrary("myExeName.exe");
在拥有扩展名时可以正常工作。 (但是当我尝试移植到另一个 OS 时它可能会咬我)
无论如何,我的问题是是否有 other/better 方法指定从哪个模块导入 natives。
P.S 我知道有 RegisterNatives
,但我希望有一种更自动化的方法。
您可以将可执行文件的完整路径(在任何 OS 上不难猜到)提供给 System.load()
函数,但 RegisterNatives 并没有写太多代码。
我已经用 JNI_CreateJavaVM
启动了一个 Java 虚拟机。我希望我的 java 类 能够使用从启动 JNI_CreateJavaVM
.
在 google 结果周围,人们告诉您使用 System.loadLibrary
指定从哪个库导入本机方法。然而,做
public class someclass
{
static { System.loadLibrary("myExeName.exe"); }
}
将失败 FindClass
java.lang.UnsatisfiedLinkError: no myExeName. in java.library.path
(我添加了 -Djava.library.path=.
作为 JavaVMOption
)
似乎 Java 切断了扩展名,这令人失望,因为 win32 LoadLibrary("myExeName.exe");
在拥有扩展名时可以正常工作。 (但是当我尝试移植到另一个 OS 时它可能会咬我)
无论如何,我的问题是是否有 other/better 方法指定从哪个模块导入 natives。
P.S 我知道有 RegisterNatives
,但我希望有一种更自动化的方法。
您可以将可执行文件的完整路径(在任何 OS 上不难猜到)提供给 System.load()
函数,但 RegisterNatives 并没有写太多代码。