【发布时间】:2013-12-28 14:07:18
【问题描述】:
我正在尝试从 C++ 运行 jar 文件
我写了这段代码:
#include "stdafx.h"
#include <iostream>
#include <strsafe.h>
#include <stdexcpt.h>
#include "jni.h"
#include <conio.h>
#include <Windows.h>
using namespace std;
#pragma comment (lib,"C:\\Users\\Hilla\\Documents\\Visual Studio 2012\\helloworld\\helloworld\\jvm.lib")
int main()
{
JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options[3];
options[0].optionString = "-Djava.compiler=NONE";
options[1].optionString="-Djava.class.path=C:\\Users\\Hilla\\Documents\\Visual
Studio 2012\\helloworld\\Debug\\hello.jar";
options[2].optionString="verbose.jni";
vm_args.version=JNI_VERSION_1_6;
vm_args.nOptions=3;
vm_args.options=options;
vm_args.ignoreUnrecognized=0;
int ret=JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);
printf("hilla");
}
我使用 x64 编译器。 我将 JVM lim 添加到系统路径。
它仍然给我这个错误:
'helloworld.exe' (Win32): 加载'C:\Users\Hilla\Documents\Visual Studio 2012\helloworld\x64\Debug\helloworld.exe'。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\ntdll.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\kernel32.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\KernelBase.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Program Files\Java\jdk1.7.0_45\jre\bin\server\jvm.dll”。无法找到或打开 PDB 文件。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\msvcp110d.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\msvcr110d.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\user32.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\advapi32.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\wsock32.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\winmm.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\psapi.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\msvcr100.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\gdi32.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\msvcrt.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\sechost.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\rpcrt4.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\ws2_32.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\winmmbase.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\nsi.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\cfgmgr32.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\devobj.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\imm32.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\msctf.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\nvinitx.dll”。无法找到或打开 PDB 文件。
“helloworld.exe”(Win32):已加载“C:\Program Files\NVIDIA Corporation\coprocmanager\detoured.dll”。无法找到或打开 PDB 文件。 “helloworld.exe”(Win32):已加载“C:\Program Files\NVIDIA Corporation\coprocmanager\Nvd3d9wrapx.dll”。无法找到或打开 PDB 文件。
“helloworld.exe”(Win32):已加载“C:\Windows\System32\setupapi.dll”。已加载符号。
“helloworld.exe”(Win32):已加载“C:\Program Files\NVIDIA Corporation\coprocmanager\nvdxgiwrapx.dll”。无法找到或打开 PDB 文件。程序“[7688] helloworld.exe”已退出,代码为 0 (0x0)。
我该如何解决这个问题?
【问题讨论】:
-
我怀疑 nVidia dll 是否有 pdb 文件,因此您将无法轻松调试这些文件。尽管您真的需要了解 GPU 驱动程序内部发生了什么吗?
-
真正的问题是什么?
-
int ret=JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);返回 -1?
-
你在java类路径中有一个空格。需要用引号括起来吗?
-
因为我20年没有学过java了,我不记得了。 java类路径变量是否需要在包含空格的路径上使用带引号的字符串,或者JavaVMOption会处理这个问题。我怀疑 jvm 没有找到 jar 文件,因为路径中有空间。
标签: java c++ jar jvm java-native-interface