Win64下通过JNI(C++)创建jvm
博客专区 > ihaolin 的博客 > 博客详情
Win64下通过JNI(C++)创建jvm
ihaolin 发表于4年前
Win64下通过JNI(C++)创建jvm
  • 发表于 4年前
  • 阅读 1067
  • 收藏 19
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: Win64下通过JNI(C++)创建jvm

在Win64下通过jni启动jvm并运行java类:

  • 环境设置:

       jdk: jdk7_45(x64)

       vs2010 64位命令行工具, 用来编译我们写的C++,就是这个:

       

      环境变量设置:

  • LIB变量添加“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64”, 编译时能找到64位库;
  • LIB变量中添加%JAVA_HOME%\lib,主要是在编译时能找到jvm.lib库文件;
  • PATH变量中添加%JAVA_HOME%\jre\bin\server,主要是为了运行编译后的exe文件能找到jvm.dll文件.
  • 码代码:

       java代码(待执行):

public class HelloInvocation{
	public static int add(int a, int b) {
		return a+b;
	}
}
      c++代码:
#include <jni.h>
#include <stdlib.h>
#include <string.h>

#ifdef _WIN32
	#define PATH_SEPARATOR ';'
#else
	#define PATH_SEPARATOR ':'
#endif

int main(){
	JavaVMOption options[1];
	JNIEnv *env;
	JavaVM *jvm;
	JavaVMInitArgs vm_args;
	long status;
	jclass cls;
	jmethodID mid;
	jint result;
	
	options[0].optionString = "-Djava.class.path=.";
	memset(&vm_args, 0, sizeof(vm_args));
	vm_args.version = JNI_VERSION_1_6;
	vm_args.nOptions = 1;
	vm_args.options = options;
	status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

	if (status != JNI_ERR){
		cls = env->FindClass("HelloInvocation");
		if (cls != 0){
			mid = env->GetStaticMethodID(cls, "add", "(II)I");
			if (mid != 0){
				result = env->CallStaticIntMethod(cls, mid, 4, 7);
				printf("Hi, 4 + 7 = %d\n", result);
			}
		}
		jvm->DestroyJavaVM();
		return 0;
	} else{
		return -1;
	}
}
作为一个看到这里的程序员,你应该很容易理解上面的代码,我不多说;
  • 拿出你的Vs2010命令行工具, 编译吧, 运行吧(编译要加入我们java jvm的库文件依赖哈):

  • 执行:

      

  • 还有些小事情,其实这里我们是借助vs2010命令行工具运行的exe文件,要是直接双击exe文件时运行不了的,应该是没有vs2010命令行工具的环境,等我后面再研究下,怎么自己来设置这些上下文,或者你知道,也可以告诉me,最后的效果图:
  • 收工




共有 人打赏支持
粉丝 254
博文 164
码字总数 106524
作品 4
×
ihaolin
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: