JNI-指定自己的可执行文件作为本机方法的源文件



我已经用JNI_CreateJavaVM启动了一个Java虚拟机。我希望我的java类能够使用从启动JNI_CreateJavaVM的可执行文件导出的本机方法。

围绕谷歌结果,人们告诉你使用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");在拥有扩展时可以工作。(但当我试图移植到另一个操作系统时,它可能会咬我一口)

无论如何,我的问题是,是否有其他/更好的方法来指定从哪个模块导入本机。

p.S我知道有RegisterNatives,但我希望有一种更自动的方式。

您可以将可执行文件的完整路径(在任何操作系统上都不难猜测)提供给System.load()函数,但RegisterNatives的代码并不多。

最新更新