Intellij Java JNI 调用 C++
也可以用 JNA,但性能没有 JNI 好。JNA的Demo没有做,可以参考(https://www.bilibili.com/video/BV1xU4y1F7Ep/?spm_id_from=autoNext)
JNI 参考(https://www.runoob.com/w3cnote/jni-getting-started-tutorials.html)
Windows 下是不能调 .so
Andorid 编译的 .so 是没办法在 linux 下运行
代码程序:
JNIDemo.java
package com.vipsoft.demo; public class JNIDemo { public native void testHello(int currentTime); public static void main(String[] args) { //加载C文件 System.loadLibrary("TestJNI"); JNIDemo jniDemo = new JNIDemo(); for (int i = 1; i <= 10; i++) { jniDemo.testHello(i); } } }
com_vipsoft_demo_JNIDemo.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_vipsoft_demo_JNIDemo */
#ifndef _Included_com_vipsoft_demo_JNIDemo
#define _Included_com_vipsoft_demo_JNIDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_vipsoft_demo_JNIDemo
* Method: testHello
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_com_vipsoft_demo_JNIDemo_testHello
(JNIEnv *env, jobject obj, jint args);
#ifdef __cplusplus
}
#endif
#endif
TestJNI.cpp
#include "pch.h" #include "com_vipsoft_demo_JNIDemo.h" JNIEXPORT void JNICALL Java_com_vipsoft_demo_JNIDemo_testHello (JNIEnv *env, jobject obj, jint args) { printf("This is C++ print => %d \n", args); }
下面是创建步骤,代码内容以上面的为准(一开始传参失败,后面调整了参数)
创建 Java 项目
打开目录
生成 jni 文件
javah -classpath . -jni -encoding UTF-8 com.vipsoft.demo.JNIDemo
生成头文件
2. 创建一个C++项目
右击将com_vipsoft_demo_JNIDemo.h 加载到 VS中
新建源文件在【源文件】目录上右击选择【新建项】
TestJNI.CPP
右击项目属性,添加 JDK 目录,否则<jni.h> 会报红
右击生成
也可以把DLL放在java 的resources 目录下,这样就不需要添加 VM options 了,放到外面,用参数引用,方便替换算法,无需再打包
-Djava.library.path=
本文来自博客园,作者:VipSoft 转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/15633219.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库