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

2015-05-14 13:46:00 +08:00
 forcecharlie

这个不是简单的运行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

开始吐槽吧.

709 次点击
所在节点    C
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/191032

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX