V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
forcecharlie
V2EX  ›  C

在 Linux 用 C++ 写一个 Java 程序的 Launcher

  •  
  •   forcecharlie · 2015-05-14 13:46:00 +08:00 · 782 次点击
    这是一个创建于 3513 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个不是简单的运行java -jar,这样的话还不如写脚本.这里是直接dlopen加载的libjvm.so,然后dlsym得到 JNI_CreateJavaVM符号的地址. 然后创建一个VM,最后跑起来.用了jni.h 和jni_md.h,但是函数指针什么的需要自己typedef一下,不链接到libjvm.so因为 LP_LIBRARY_PATH还是没配置文件玩起来好.

    typedef  jint(*CreateJavaRuntime)(JavaVM **pvm,JNIEnv **env,void *args);
    
    auto jdkenv=getenv("JAVA_HOME");
        javapath=ini.GetValue("Environment","JDKRoot",jdkenv);////defualt getenv JAVA_HOME
        auto jarfile=ini.GetValue("App","Path");
    
    #ifdef __x86_64__
        jvmso=javapath+"/jre/lib/amd64/server/libjvm.so";
        jvmso1=javapath+"/lib/amd64/server/libjvm.so";
    #elif defined(__i686__)
        jvmso=javapath+"/jre/lib/server/libjvm.so";
        jvmso1=javapath+"/lib/server/libjvm.so";
    #endif
    

    开始吐槽吧.

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1020 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:34 · PVG 04:34 · LAX 12:34 · JFK 15:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.