Java 如何在JNI中获取默认JVM初始参数

Java 如何在JNI中获取默认JVM初始参数,java,c++,java-native-interface,Java,C++,Java Native Interface,我试图获取可用jvm的默认jvm参数,但得到了一个奇怪的输出。谁能告诉我出了什么事 输出: 65542 �p����Y����k�.L�R���g���J����sk��,��*�Jk��xk�� 代码: #包括“jni.h” #包括 #包括 #包括 使用名称空间std; void*JNI_FindCreateJavaVM(char*vmlibpath){ void*libVM=dlopen(vmlibpath,RTLD_-LAZY); if(libVM==NULL){ 返回NULL; } 返

我试图获取可用jvm的默认jvm参数,但得到了一个奇怪的输出。谁能告诉我出了什么事

输出:

65542
�p����Y����k�.L�R���g���J����sk��,��*�Jk��xk��
代码:

#包括“jni.h”
#包括
#包括
#包括
使用名称空间std;
void*JNI_FindCreateJavaVM(char*vmlibpath){
void*libVM=dlopen(vmlibpath,RTLD_-LAZY);
if(libVM==NULL){
返回NULL;
}
返回dlsym(libVM,“JNI_GetDefaultJavaVMInitArgs”);
}
int main(){
JavaVMOption-vm_选项;
JavaVMInitArgs vm_args;
vm_args.version=JNI_version_1_6;
vm_args.ignoreunrecogned=JNI_FALSE;
vm_args.options=&vm_options;
void*(*lib_func)(void*)=0;
lib_func=(void*(*)(void*)JNI_FindCreateJavaVM(
“/usr/lib/jvm/java-6-sun/jre/lib/i386/client/libjvm.so”);
lib_func(&vm_参数);

coutJNI_GetCreatedJavaVMs的原型是:

jint JNI_GetCreatedJavaVMs(JavaVM**vmBuf,jsize bufLen,jsize*nVMs);


您使用
*JavaVMInitArgs
参数调用函数,我不确定您为什么希望代码打印出合理的内容。

JNI_GetCreatedJavaVMs的原型是:

jint JNI_GetCreatedJavaVMs(JavaVM**vmBuf,jsize bufLen,jsize*nVMs);


您使用
*JavaVMInitArgs
参数调用函数,我不确定您为什么希望代码打印出合理的内容。

我进行了编辑,但现在得到以下输出:65542�P����Y����K�.L�R���G���J����sk��,��*�Jk��xk��我尝试过,但现在我得到了以下输出:65542�P����Y����K�.L�R���G���J����sk��,��*�Jk��xk��
#include "jni.h"
#include <iostream>
#include <dlfcn.h>
#include <cstdlib>

using namespace std;

void * JNI_FindCreateJavaVM(char *vmlibpath) {
    void *libVM = dlopen(vmlibpath, RTLD_LAZY);

    if (libVM == NULL) {
        return NULL;
    }
    return dlsym(libVM, "JNI_GetDefaultJavaVMInitArgs");
}

int main() {
    JavaVMOption vm_options;
    JavaVMInitArgs vm_args;

    vm_args.version = JNI_VERSION_1_6;
    vm_args.ignoreUnrecognized = JNI_FALSE;
    vm_args.options = &vm_options;

    void* (*lib_func)(void *) = 0;

    lib_func = (void*(*)(void*)) JNI_FindCreateJavaVM(
            "/usr/lib/jvm/java-6-sun/jre/lib/i386/client/libjvm.so");

    lib_func(&vm_args);

    cout << vm_args.version << endl;
    cout << vm_args.options[0].optionString << endl;

    return 0;
}