Как получить Default JVM INGIAL ARGS в JNI - PullRequest
1 голос
/ 25 января 2010

Я пытаюсь получить аргументы jvm по умолчанию о доступной JVM, но я получаю странный вывод. Кто-нибудь может указать мне, что не так?

Выход:

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;
}

1 Ответ

1 голос
/ 25 января 2010

Прототип для JNI_GetCreatedJavaVMs:

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

Вы вызываете функцию с параметром *JavaVMInitArgs, и я не уверен, почему вы ожидаете, что ваш код напечатает что-нибудь разумное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...