JNI基础
首先编写一段java代码
public class A { public native void TestFromCpp(); }
然后使用命令javac A.java -h . 生成头文件
javah A.java
然后得到一个生成的头文件
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_dronff_Test_A */ #ifndef _Included_com_dronff_Test_A #define _Included_com_dronff_Test_A #ifdef __cplusplus extern "C" { #endif /* * Class: com_dronff_Test_A * Method: TestFromCpp * Signature: ()V */ JNIEXPORT void JNICALL Java_com_dronff_Test_A_TestFromCpp (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif
然后创建一个cpp文件
#include<stdio.h> #include<jni.h> #include "com_dronff_Test_A.h" JNIEXPORT void JNICALL Java_com_dronff_Test_A_TestFromCpp (JNIEnv *, jclass){ printf("hello jni"); }
使用命令
gcc -I "C:\Program Files\Java\jdk1.8.0_202\include" -I "C:\Program Files\Java\jdk1.8.0_202\include\win32" -shared -o hello.dll C:\Users\Dronff\IdeaProjects\JNITest\src\com\dronff\Test\TestA.cpp编译文件
将编译好的文件hello.dll复制到java代码目录下
package com.dronff.Test; /** * @author tyf * 2022/7/4 */ public class A { public native void TestFromCpp(); static { System.load(System.getProperty("user.dir")+"\\hello.dll"); } public static void main(String[] args) { A a = new A(); a.TestFromCpp(); } } //gcc -I "C:\Program Files\Java\jdk1.8.0_202\include" -I "C:\Program Files\Java\jdk1.8.0_202\include\win32" -shared -o hello.dll C:\Users\Dronff\IdeaProjects\JNITest\src\com\dronff\Test\TestA.cpp
然后运行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现