JNI在64位编译器中未解析外部符号__imp_JNI_CreateJavaVM

时间:2012-09-21 10:03:29

标签: java visual-c++ java-native-interface

我正在尝试使用JNI创建JVM。我正在使用win 7 64位操作系统。在线JNI_CreateJavaVM我的程序崩溃了。我决定使用64位编译器编译我的程序并得到以下错误:

Error 1 error LNK2001: unresolved external symbol __imp_JNI_CreateJavaVM

我应该从哪里开始寻找链接问题以及为什么我的程序在32位模式下崩溃?

void createJVM()
{

JavaVMInitArgs vm_args; 
JavaVMOption options[4]; 

int n = 0;     
char * str;
str= new char[1000];
sprintf(str, "-Djava.class.path=%S\\tst.jar", myPath);
options[n++].optionString = str; 

str= new char[1000];
sprintf(str, "-Djava.library.path=%S\\lib;%S", myPath, myPath);
options[n++].optionString = str;

str= new char[1000];
sprintf(str, "-Duser.dir=%S", myPath);
options[n++].optionString = str;

vm_args.version = JNI_VERSION_1_4;
vm_args.nOptions = n;     
vm_args.options = options;     
vm_args.ignoreUnrecognized = false;


JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); 
}

2 个答案:

答案 0 :(得分:4)

你添加了' jvm.lib'作为项目中的附加依赖项? 此外,您需要在附加库目录中指定jvm.lib的位置...

另请注意,对于64位应用程序,您需要指向64位库,否则链接器不会链接

您可以在Configuration Properties-> Linker区域中找到这些设置。

希望这些信息可以帮到你。

干杯,

答案 1 :(得分:0)

由于我无法表达自己(仍然不到15个声誉),我只想确认Naytzyrhc解决方案对我有效。

为了澄清一点,在 Visual Studio Express 2013(v12)中,您应该去:

Project -> [YourProjectName] Properties... -> Linker -> General -> Additional Library Directories

用于将lib文件夹添加到其他库目录,并且:

Project -> [YourProjectName] Properties... -> Linker -> Input -> Additional Dependencies

用于将jvm.lib添加到其他依赖项。