java - 如何在 JNI 中获取默认的 JVM INITIAL ARGS

标签 java c++ java-native-interface

我正在尝试获取可用 JVM 的默认 jvm args,但我得到了一个奇怪的输出。谁能指出我哪里出了问题?

输出:

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

最佳答案

JNI_GetCreatedJavaVMs 的原型(prototype)是:

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

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

关于java - 如何在 JNI 中获取默认的 JVM INITIAL ARGS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2133185/

相关文章:

java - 将对象添加到 jframe java

c++ - 缩短 If 语句并减少冗余

c++ - Qt5:如何使用 State 正确设置 ProgressBar

java - 在 registerNative 中注册 native Layer Call 失败

java - Android 警报管理器不会触发我的事件

java - 带有引导 : "There was an unexpected error (type=Not Found, status=404)" 的 Spring MVC

java - 与 Android 线程、Handler 和 HandlerThreads 的并发

c++ - 将 header 中定义的 MyClass 作为函数参数传递给其他文件

java - 通过 JNI 在 C 和 Java 之间来回调用

Java native 方法。公共(public)与私有(private)