我已经用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的代码并不多。