根据JNI文档,我在尝试启动JVM实例时只需要jvm.dll。但是,如果我只是将jvm.dll放在我的应用程序所在的文件夹中,我会收到以下错误:
VM初始化期间发生错误 无法加载本机库:无法找到依赖库
我可以运行代码的唯一方法是将jdk \ jre \ bin \ server文件夹(包含jvm.dll)放在我的环境路径上。似乎JNI分别依赖于jdk \ jre \ bin和jdk \ jre \ lib文件夹中的一些其他dll和jar文件。事实上,我通过在其他地方复制此文件夹,在我的环境路径中使用该文件夹,然后慢慢删除除jvm.dll之外的文件/文件夹直到它停止工作来测试这一点。
任何人都可以解释我想做错的事吗?如何让我的代码只依赖于jvm.dll而不是其他任何东西。提前谢谢!
答案 0 :(得分:2)
您的代码不能仅依赖于jvm.dll。 jvm.dll只是整个JRE的网关。你不能只选择一些文件并将它们复制到某个地方。如果要运行Java,则需要完整的Java运行时环境。
将jvm.dll保留在原处并从那里加载。为此,您可以将DLL放在PATH中的文件夹中。或者您可以从注册表中确定其位置,并使用LoadLibrary
和GetProcAddress
获取jvm函数。
如果您以后想要/必须使用私有JRE发送应用程序,则可以省略一些文件。 Oracle在某个地方有一个文档,关于哪些文件可以省略,但我没有方便的链接,而且它只是少数几个文件。