也可以用 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. SQL改写案例2

    postgresql 并没有像 oracle .dm 有这么丰富的 hint,在不改 sql 的情况下能干预执行计划. 如果想学好 postgresql.kingbase.MySQL  的sql 调优 ...

  2. 如何优雅使用 vuex

    大纲 本文内容更多的是讲讲使用 vuex 的一些心得想法,所以大概会讲述下面这些点: Q1:我为什么会想使用 vuex 来管理数据状态交互? Q2:使用 vuex 框架有哪些缺点或者说副作用? Q3: ...

  3. Vivado生成bitstream时报错[Opt 31-67] Problem: A LUT3 cell in the design is missing a connection on input pin I1, which is used by the LUT equation

    这个原因主要是因为有一个引脚没有用到,解决方法. 1.打开Schematic. 2.根据提示的模块去找,比如说我的报错. [Opt 31-67] Problem: A LUT3 cell in the ...

  4. DataGrip安装与使用

    写在前面:同学们记得以命令为主,图形界面为辅.了解图形怎么操作即可 一.DataGrip软件的安装和初始化 首先在浏览器上搜索datagrip,然后打开连接 点击DOWNLOAD   按照你电脑系统来 ...

  5. Python输入三个整数x,y,z,请把这三个数由小到大输出。

    break_out = False while 1: s = [] for i in range(3): x = int(input('请输入一个数:\n')) if x == -1: # 设计一个退 ...

  6. 每天5分钟复习OpenStack(十)Ceph 架构

    在很多关于Ceph的文章中,通常会介绍一堆概念.虽然这些概念很重要,但是对于一个新手来说,同时接受太多的概念实际上很难消化.因此,在阅读本章节时要保持轻松的心情,只需要对所有的概念有个了解就可以了,因 ...

  7. Ubuntu下使用apt-get命令查询并安装指定版本的软件

    执行以下命令,查询软件所有的版本号 sudo apt-cache madison <package> <package>为需要安装的包名,返回结果第二列即可用的版本号 执行以下 ...

  8. Grafana系列-Loki-基于日志实现告警

    系列文章 Loki 系列文章 前言 实际应用中除了基于 Metrics 告警, 往往还有基于日志的告警需求, 可以作为基于 Metrics 告警之外的一个补充. 典型如基于 NGINX 日志的错误率告 ...

  9. 高效的 Json 解析框架 kotlinx.serialization

    一.引出问题 你是否有在使用 Gson 序列化对象时,见到如下异常: Abstract classes can't be instantiated! Register an InstanceCreat ...

  10. [ICPC2015WF] Tours

    题目描述 The Arca Carania Mountain national park is opening up for tourist traffic. The national park ha ...