java通过 jni 调用C++动态库----上篇

这是本人原创,转载需要说明出处

https://blog.csdn.net/Oyasimi1412/article/details/82259597

工具:JAVA(jdk10版本)和photon(4.8版本光子),windows10操作系统

最近写了一个加密库,C ++写的动态库,要给java方使用,于是研究了一下java通过jni调用c ++动态库

过程如下:

1:首先新建一个java的项目(项目)名为的HelloWorld

暂时不创建moudle,这里简单例子不需要这个。

2:在SRC目录上创建一个包(包)名为com.jni

3:再在包com.jnishang创建两个类HelloWorld和Test Dll

大家同理创建TestDll类。

helloWorld.java源代码如下:

package com.jni;

public class HelloWorld {
	static
	{  
		System.loadLibrary("mydll");
	}
	
	public native void displayHelloWorld();
}

上面的mydll就是我们下一篇将要用到的动态库,这里先这样写。

TestDll.java源代码如下:

package com.jni;

public class TestDll {
	public static void main(String[] args) 
	{
		// TODO Auto-generated method stub
		HelloWorld helloWorld = new HelloWorld(); 
		helloWorld.displayHelloWorld();
	}
}

相关代码注意在ecilpse里面做一下保存工作,不然后面的命令行有可能失败

到这里准备工作基本结束:

先编译HelloWorld.java,我们这里使用命令行编译

先在电脑到达这个目录d:\ Eclipse的工作空间\的HelloWorld \ SRC \ COM \ JNI

也就是两个的的java文件所在目录,如下:

shift +鼠标右键进入命令行,如下:

。我们先编译出类文件使用命令javac的的:

命令如下:javac HelloWorld.java

成功后在同一目录就可发现HelloWorld.class的文件了,如下:

接下来要编译我们最重要的.H文件了,这里我搞了很久,本来是用JAVAH命令来编译,网上也有大量的相关教程,但是我用的jdk10,新版本的JDK已经去除了javah.exe ,也就是说不能再用javah命令了,jdk9开始就提供了javac -h命令代替,经过一些尝试,我还是弄出来了javac -h命令的用法。

希望了解JAVAH用法的朋友请参考别的同学的分享,由于我本机已经无法执行JAVAH命令,所以没有这方面的说明给大家,这块的文档网上应该很多

我们需要先让命令行回到D:\ eclipse-workspace \ HelloWorld \ src目录,通过两个命令行cd ..就可以回来,如下:

现在我们已经回到了D:\ eclipse-workspace \ HelloWorld \ src目录,接下来执行javac -h命令,这里的目录一定不要弄错了,希望读者,按要求操作。

执行javac -h.COM \ JNI \ HelloWorld.java

然后就可以在SRC目录下找到com_jni_HelloWorld.h

到了这里,我们与C ++交互的.h文件就有了,com_jni_HelloWorld.h源码如下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_jni_HelloWorld */

#ifndef _Included_com_jni_HelloWorld
#define _Included_com_jni_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_jni_HelloWorld
 * Method:    displayHelloWorld
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_jni_HelloWorld_displayHelloWorld
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

注意,不要修改这个头文件。

到这里,关键的头文件就生成了,接下来一篇介绍如何使用生成的这个头文件

这是本人原创,转载需要说明出处

https://blog.csdn.net/Oyasimi1412/article/details/82259597

下篇讲述具体使用这个.h文件

猜你喜欢

转载自blog.csdn.net/Oyasimi1412/article/details/82259597
今日推荐