初始化JNI_CreateJavaVM的第三个参数
方法初始化JNI_CreateJavaVM的第三个参数,java,java-native-interface,Java,Java Native Interface,方法JNI_CreateJavaVM的第三个参数将第三个参数作为JavaVMInitArgs结构 typedef struct JavaVMInitArgs { jint version; jint nOptions; JavaVMOption *options; jboolean ignoreUnrecognized;
JNI_CreateJavaVM
的第三个参数将第三个参数作为JavaVMInitArgs
结构
typedef struct JavaVMInitArgs {
jint version;
jint nOptions;
JavaVMOption *options;
jboolean ignoreUnrecognized;
} JavaVMInitArgs;
我如何初始化它?我不能这样做
JNI_CreateJavaVM的原型:jint JNI_CreateJavaVM(JavaVM**pvm,void**penv,
void*vm_参数)代码>
如何初始化vm_参数?经过讨论,我们得出结论,您的编译器设置存在问题
为了能够成功编译和链接JNI_CreateJavaVM
,您需要将jvm
库添加到链接器中
初步答复:
查看以下示例可能会解释您需要执行的操作:
JavaVMInitArgs vm_args;
JavaVMOption options[4];
options[0].optionString = "-Djava.compiler=NONE"; /* disable JIT */
options[1].optionString = "-Djava.class.path=c:\myclasses"; /* user classes */
options[2].optionString = "-Djava.library.path=c:\mylibs"; /* set native library path */
options[3].optionString = "-verbose:jni"; /* print JNI-related messages */
vm_args.version = JNI_VERSION_1_2;
vm_args.options = options;
vm_args.nOptions = 4;
vm_args.ignoreUnrecognized = TRUE;
/* Note that in the JDK, there is no longer any need to call
* JNI_GetDefaultJavaVMInitArgs.
*/
res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);
if (res < 0) ...
JavaVMInitArgs vm_args;
JavaVMOption选项[4];
选项[0]。选项字符串=“-Djava.compiler=NONE”;/*禁用JIT*/
选项[1]。选项字符串=“-Djava.class.path=c:\myclasses”;/*用户类*/
选项[2]。选项字符串=“-Djava.library.path=c:\mylibs”/*设置本机库路径*/
选项[3]。选项字符串=“-verbose:jni”;/*打印与JNI相关的消息*/
vm_args.version=JNI_version_1_2;
vm_args.options=选项;
vm_args.nOptions=4;
vm_args.ignoreunrecogned=TRUE;
/*注意,在JDK中,不再需要调用
*JNI_GetDefaultJavaVMInitArgs。
*/
res=JNI_CreateJavaVM(&vm,(void**)&env,&vm_args);
如果(res<0)。。。
经过讨论,我们得出结论,您的编译器设置存在问题
为了能够成功编译和链接JNI_CreateJavaVM
,您需要将jvm
库添加到链接器中
初步答复:
查看以下示例可能会解释您需要执行的操作:
JavaVMInitArgs vm_args;
JavaVMOption options[4];
options[0].optionString = "-Djava.compiler=NONE"; /* disable JIT */
options[1].optionString = "-Djava.class.path=c:\myclasses"; /* user classes */
options[2].optionString = "-Djava.library.path=c:\mylibs"; /* set native library path */
options[3].optionString = "-verbose:jni"; /* print JNI-related messages */
vm_args.version = JNI_VERSION_1_2;
vm_args.options = options;
vm_args.nOptions = 4;
vm_args.ignoreUnrecognized = TRUE;
/* Note that in the JDK, there is no longer any need to call
* JNI_GetDefaultJavaVMInitArgs.
*/
res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);
if (res < 0) ...
JavaVMInitArgs vm_args;
JavaVMOption选项[4];
选项[0]。选项字符串=“-Djava.compiler=NONE”;/*禁用JIT*/
选项[1]。选项字符串=“-Djava.class.path=c:\myclasses”;/*用户类*/
选项[2]。选项字符串=“-Djava.library.path=c:\mylibs”/*设置本机库路径*/
选项[3]。选项字符串=“-verbose:jni”;/*打印与JNI相关的消息*/
vm_args.version=JNI_version_1_2;
vm_args.options=选项;
vm_args.nOptions=4;
vm_args.ignoreunrecogned=TRUE;
/*注意,在JDK中,不再需要调用
*JNI_GetDefaultJavaVMInitArgs。
*/
res=JNI_CreateJavaVM(&vm,(void**)&env,&vm_args);
如果(res<0)。。。
说W:\elita\jnitests\workspace\c\MyHook\MyHook.c | 57 |对_imp | u JNI的未定义引用_CreateJavaVM@12“|
我认为您的include目录设置不正确(请检查您是否同时包含jdk/include
和jdk/include/
)。我应该在哪里包含它们?您的编译器选项,在检查选项的同时,还要检查是否为链接器设置了库路径和-D_JNI_实现
变量。我已经以同样的方式运行了一个月的JNI程序。你为什么认为有一个包含问题?说W:\elita\jnitests\workspace\c\MyHook\MyHook.c | 57 |未定义对_imp_JNI的引用_CreateJavaVM@12“|
我认为您的include目录设置不正确(请检查您是否同时包含jdk/include
和jdk/include/
)。我应该在哪里包含它们?您的编译器选项,在检查选项的同时,还要检查是否为链接器设置了库路径和-D_JNI_实现
变量。我已经以同样的方式运行了一个月的JNI程序。你为什么认为有一个包含问题?