这是本人原创,转载需要说明出处
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文件