c++ - 用我的应用程序打包一个 jre

标签 c++ windows java-native-interface java

我的应用程序包含一个使用 JNI 调用 java 程序的 c++ exe 文件,因此需要 jvm.dll。但是,我希望我的应用程序附带它自己的嵌入式 jre,但是在我复制在 JAVA_HOME 中找到的 jre6 文件夹并将其添加到我的安装程序后,它无法运行该程序(VM 初始化期间发生错误无法加载 native 库:可以't find dependent libraries),当我在jvm.dll上使用dependency walker时,它说找不到gpsvc.dll、IEShims.dll和sysntfy.dll。在我尝试将这些 dll 复制到与 jvm.dll 相同的文件夹后,dependency walker 告诉我 gpsvc.dll 和 sysntfy.dll 是 64 位的,而它应该是 x86。问题是,我的系统上只有这些 dll,我该怎么办?

最佳答案

Java 虚拟机不仅仅包含 jvm.dll。您需要重新分发整个 JVM 包并将其安装在用户的机器上,而不是仅仅将 jvm.dll 添加到您自己的应用程序中。

要求您的用户在安装您的应用程序之前自行下载并安装 JVM 可能会容易得多。如果您真的想在您的应用程序中重新分发 JVM,您需要在 Oracle 的网站上找到文档,了解确切的许可证是什么以及如何做。看this paragraph例如 JDK 6 自述文件。

不是复制jvm.dll和它依赖的其他库那么简单

关于c++ - 用我的应用程序打包一个 jre,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7512285/

相关文章:

windows - Vagrant 同步文件夹链接到 Apache/var/www/in Ubuntu VM

android - 捕获运行在 Android 上的 native 代码引发的异常

java - 使用 Eclipse 构建 Android 原生 Opencv 给出 "undefined reference to ` cvCreateFileCapture'"

c++ - 如何用断言做一些有用的事情?

c++ - 如何在 C++ 中使用 setiosflags 将十进制数打印为八进制数

c++ - 如何计算 token C++ 中子字符串存在的次数

python - 为什么我无法激活健身房表格

java - 如何获取 Java 中所有窗口句柄的列表(使用 JNA)?

android - 如何调试 Android Native 崩溃日志(可能是多个 webview 问题)?

c++ - 错误 : conflicting declaration for uint32_t