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

本文介绍如何使用Java通过JNI调用C++动态库的方法,包括创建Java项目、生成必要的头文件及编译步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

https://blog.youkuaiyun.com/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.youkuaiyun.com/Oyasimi1412/article/details/82259597

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值