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=


Intellij Java JNI 调用 C++的更多相关文章
- Java JNI调用c语言的dll测试
最近复习C语言和java语言(10年没用了,温习一下),用JNI调用C语言的dll测试,以前没做过,在网上找了很多,总结如下: 环境:windows 10(64位) + JDK(32位,版本1.7.0 ...
- java jni 调用c语言函数
今日在hibernate源代码中遇到了native关键词,甚是陌生,就查了点资料,对native是什么东西有了那么一点了解,并做一小记. native关键字说明其修饰的方法是一个原生态方法,方法对应的 ...
- code::Blocks生成的dll 在 java jni 调用遇到的问题
Test.java__________________________________ public class Test{ public static native void p(); pub ...
- java jni 调用c++ opencv代码成功范例
java上建立接口定义 package com.dtk; public class Rec { public native String RecImage(String src); public st ...
- java jni调用
http://www.cnblogs.com/mandroid/archive/2011/06/15/2081093.html
- JAVA的JNI调用
由于JNI调用C和调用C++差不多,而且C++中可以混合写C代码,所以这里主要是写关于JNI调用C++的部分. 一般步骤: 先是写普通的Java类,其中包括本地方法调用. 然后编译这个Java类,调 ...
- HAL中通过JNI调用java方法【转】
转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...
- JAVA使用JNI调用C++动态链接库
JAVA使用JNI调用C++动态链接库 使用JNI连接DLL动态链接库,并调用其中的函数 首先 C++中写好相关函数,文件名为test.cpp,使用g++编译为DLL文件,指令如下: g++ -sha ...
- JNI编程(二) —— 让C++和Java相互调用(1)
自己在外面偷偷的算了下,又有将近两个月没更新过blog了.趁着今天有兴致,来更新JNI编程的第二篇文章.在第一篇里,大概介绍了JNI的特点.用途和优劣.并且做一个最简单的JNI的例子,不过说实话那个例 ...
- java JNI 的实现(2)-java和C/C++的相互调用.
目录 概述 一,java代码 二,稍微注意通过javah生成的'C/C++'.h头文件和源java代码的关系 三,在C/C++中实现java的native方法(完整C/C++) 1,修改age,即Ja ...
随机推荐
- Python 利用pandas和matplotlib绘制堆叠柱状图
在数据可视化中,堆叠柱状图是一种常用的图表类型,它能够清晰地展示多个类别的数据,并突出显示每个类别中各部分的总量和组成比例.本文将演示如何使用 Python 的 pandas 和 matplotlib ...
- (Good topic)贪心+二分查找:最长上升子序列(3.14 leetcode每日打卡)
给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4. 说明 ...
- python之if语句处理列表
目录 检查特殊元素 确定列表不是空的 使用多个列表 检查特殊元素 在我们上期讲的python之史上最详细if教程就提到过有关于列表的关系运算符 那我们现在来创建并且打印一个列表先 list_1 = [ ...
- 通过match看rust
最常见的逻辑控制流比如if-else,switch,while等常用编程语言都支持,但恰巧rust语法中没有switch,取而代之的是更加强大适用的match匹配,我们就来看看rust的match有何 ...
- ubuntu 22.04.1安装雷池开源waf应用防火墙
ubuntu 22.04.1安装雷池开源waf应用防火墙 雷池waf是开源应用防火墙,国内首创.业内领先的智能语义分析算法 官方网站:https://waf-ce.chaitin.cn/ 官方文档:h ...
- Nginx的安装与运行
前言:本文是基于虚拟机上的centOS 7对Nginx的安装,可以使用uname -a查看centOS系统版本,本文用来记录安装nginx的步骤和相关命令,方便日后使用时查看. 去官网https:// ...
- A Novel Cascade Binary Tagging Framework for Relational Triple Extraction(论文研读与复现)
A Novel Cascade Binary Tagging Framework for Relational Triple Extraction Zhepei Wei,Jianlin Su, Yue ...
- Windows上安装jenkins
官网下载jenkins https://www.jenkins.io/zh/download/ 选择Windows版本下载,安装 注意,需要java11,17或21才能安装 java下载地址 htt ...
- 【ASP.NET Core】使用SignalR推送服务器日志
一个多月前接手了一个产线机器人项目,上位机以读写寄存器的方式控制机器人,服务器就是用 ASP.NET Core 写的 Web API.由于前一位开发者写的代码质量问题,导致上位机需要16秒才能启动.经 ...
- 设置CentOS7使用代理服务器上网
用三种方法设置CentOS7使用代理服务器上网 https://zhangyujia.cn/?p=1206 https://www.cnblogs.com/a-du/p/8964048.html 一. ...