也可以用 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++的更多相关文章

  1. Java JNI调用c语言的dll测试

    最近复习C语言和java语言(10年没用了,温习一下),用JNI调用C语言的dll测试,以前没做过,在网上找了很多,总结如下: 环境:windows 10(64位) + JDK(32位,版本1.7.0 ...

  2. java jni 调用c语言函数

    今日在hibernate源代码中遇到了native关键词,甚是陌生,就查了点资料,对native是什么东西有了那么一点了解,并做一小记. native关键字说明其修饰的方法是一个原生态方法,方法对应的 ...

  3. code::Blocks生成的dll 在 java jni 调用遇到的问题

    Test.java__________________________________ public class Test{    public static native void p(); pub ...

  4. java jni 调用c++ opencv代码成功范例

    java上建立接口定义 package com.dtk; public class Rec { public native String RecImage(String src); public st ...

  5. java jni调用

    http://www.cnblogs.com/mandroid/archive/2011/06/15/2081093.html

  6. JAVA的JNI调用

    由于JNI调用C和调用C++差不多,而且C++中可以混合写C代码,所以这里主要是写关于JNI调用C++的部分. 一般步骤: 先是写普通的Java类,其中包括本地方法调用.  然后编译这个Java类,调 ...

  7. HAL中通过JNI调用java方法【转】

    转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...

  8. JAVA使用JNI调用C++动态链接库

    JAVA使用JNI调用C++动态链接库 使用JNI连接DLL动态链接库,并调用其中的函数 首先 C++中写好相关函数,文件名为test.cpp,使用g++编译为DLL文件,指令如下: g++ -sha ...

  9. JNI编程(二) —— 让C++和Java相互调用(1)

    自己在外面偷偷的算了下,又有将近两个月没更新过blog了.趁着今天有兴致,来更新JNI编程的第二篇文章.在第一篇里,大概介绍了JNI的特点.用途和优劣.并且做一个最简单的JNI的例子,不过说实话那个例 ...

  10. java JNI 的实现(2)-java和C/C++的相互调用.

    目录 概述 一,java代码 二,稍微注意通过javah生成的'C/C++'.h头文件和源java代码的关系 三,在C/C++中实现java的native方法(完整C/C++) 1,修改age,即Ja ...

随机推荐

  1. Python 利用pandas和matplotlib绘制堆叠柱状图

    在数据可视化中,堆叠柱状图是一种常用的图表类型,它能够清晰地展示多个类别的数据,并突出显示每个类别中各部分的总量和组成比例.本文将演示如何使用 Python 的 pandas 和 matplotlib ...

  2. (Good topic)贪心+二分查找:最长上升子序列(3.14 leetcode每日打卡)

    给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4. 说明 ...

  3. python之if语句处理列表

    目录 检查特殊元素 确定列表不是空的 使用多个列表 检查特殊元素 在我们上期讲的python之史上最详细if教程就提到过有关于列表的关系运算符 那我们现在来创建并且打印一个列表先 list_1 = [ ...

  4. 通过match看rust

    最常见的逻辑控制流比如if-else,switch,while等常用编程语言都支持,但恰巧rust语法中没有switch,取而代之的是更加强大适用的match匹配,我们就来看看rust的match有何 ...

  5. ubuntu 22.04.1安装雷池开源waf应用防火墙

    ubuntu 22.04.1安装雷池开源waf应用防火墙 雷池waf是开源应用防火墙,国内首创.业内领先的智能语义分析算法 官方网站:https://waf-ce.chaitin.cn/ 官方文档:h ...

  6. Nginx的安装与运行

    前言:本文是基于虚拟机上的centOS 7对Nginx的安装,可以使用uname -a查看centOS系统版本,本文用来记录安装nginx的步骤和相关命令,方便日后使用时查看. 去官网https:// ...

  7. 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 ...

  8. Windows上安装jenkins

    官网下载jenkins https://www.jenkins.io/zh/download/ 选择Windows版本下载,安装 注意,需要java11,17或21才能安装 java下载地址  htt ...

  9. 【ASP.NET Core】使用SignalR推送服务器日志

    一个多月前接手了一个产线机器人项目,上位机以读写寄存器的方式控制机器人,服务器就是用 ASP.NET Core 写的 Web API.由于前一位开发者写的代码质量问题,导致上位机需要16秒才能启动.经 ...

  10. 设置CentOS7使用代理服务器上网

    用三种方法设置CentOS7使用代理服务器上网 https://zhangyujia.cn/?p=1206 https://www.cnblogs.com/a-du/p/8964048.html 一. ...