我的简单命令行应用:
int _tmain(int argc, _TCHAR* argv[])
{
JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options[1];
options[0].optionString = "-Djava.class.path=."; //Path to the java source code
vm_args.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = 0;
jint ret = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
return 0;
}
给了我:
Error occurred during initialization of VM Unable to load native library: Can't find dependent libraries
永远不会达到“返回0”的断点。 jvm.dll与我的命令行应用程序驻留在同一目录中。
我不明白这是错的。有任何想法吗? Thanx提前
答案 0 :(得分:5)
我认为您的问题在Sun JNI常见问题解答中由this question回答。
TL; DR版本:不要移动JVM安装的DLL。
答案 1 :(得分:2)
在我的经验中,
<强>原因强>
也许,JVM.DLL位于路径下方。
C:\ Program Files \ Java \ jdk1.6.0_xx \ jre \ bin \ client \(a)
以下文件夹包含JVM需要的许多DLL;
C:\ Program Files \ Java \ jdk1.6.0_xx \ jre \ bin \(b)
因此,JMV.DLL
(您动态链接的)会尝试搜索其父文件夹中的所有DLL
(b)。
<强>解决方案强>
不要将JVM.DLL复制到.exe所在的文件夹中! 检查PATH系统变量。它必须包含(a)和(b)路径。 如果是这样,也许您的.exe将成功执行。