首页 > 编程语言 >Intellij Java JNI 调用 C++

Intellij Java JNI 调用 C++

时间:2022-12-23 10:08:09浏览次数:68  
标签:Java Intellij demo void vipsoft testHello JNIDemo JNI com

也可以用 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 项目

Intellij Java JNI 调用 C++_Java


Intellij Java JNI 调用 C++_Java_02

 

 

 打开目录

Intellij Java JNI 调用 C++_Java_03

 

 

 

Intellij Java JNI 调用 C++_#include_04

 

Intellij Java JNI 调用 C++_#include_05

 

 

 

生成 jni 文件

javah -classpath . -jni -encoding UTF-8 com.vipsoft.demo.JNIDemo

Intellij Java JNI 调用 C++_java_06

 

 

 

生成头文件

2. 创建一个C++项目

Intellij Java JNI 调用 C++_java_07

Intellij Java JNI 调用 C++_#include_08

 

 

Intellij Java JNI 调用 C++_java_09

 

 

Intellij Java JNI 调用 C++_java_10

 

 右击将com_vipsoft_demo_JNIDemo.h 加载到 VS中

新建源文件在【源文件】目录上右击选择【新建项】

 

 

Intellij Java JNI 调用 C++_Java_11

 

 

 

 

Intellij Java JNI 调用 C++_java_12

  

TestJNI.CPP

Intellij Java JNI 调用 C++_#include_13

 

 右击项目属性,添加 JDK 目录,否则<jni.h> 会报红 

Intellij Java JNI 调用 C++_#include_14

 

 

右击生成

 

Intellij Java JNI 调用 C++_Java_15

 

 

Intellij Java JNI 调用 C++_Java_16

 

也可以把DLL放在java 的resources 目录下,这样就不需要添加 VM options 了,放到外面,用参数引用,方便替换算法,无需再打包

-Djava.library.path=

Intellij Java JNI 调用 C++_Java_17

 

Intellij Java JNI 调用 C++_#include_18

 



标签:Java,Intellij,demo,void,vipsoft,testHello,JNIDemo,JNI,com
From: https://blog.51cto.com/u_15116285/5964861

相关文章

  • 组合模式javac++
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解组合模式的动机,掌握该模式的结构;2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式用透明组合......
  • day01_Java基础
    day01_Java基础课程目标1.【了解】Java语言发展史2.【理解】Java语言平台版本3.【理解】Java语言特点4.【理解】JRE与JDK5.【掌握】J......
  • Java:Spring Boot设置静态资源缓存方案-协商缓存
    版本<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.5</version><rela......
  • Java--jdk8的下载与安装
    java安装开发环境安装JDK下载链接:JDK8下载电脑对应版本注册账号点击下载会跳转页面,有账号登录,无账号注册安装可以自定义安装路径(记住它!!!)配置环境变量右键我的......
  • 2022年能让你早点下班的36个JavaScript实用函数!
    携手创作,共同成长!这是我参与「掘金日新计划·8月更文挑战」的第17天,点击查看活动详情之前在掘金写了一篇介绍JavaScript小技巧的文章,很受大家欢迎。但是有朋友说还......
  • JavaScript - DOM 利用节点获取元素
    节点操作网页中的所有内容都是节点(标签、属性、文本、注释等),在DOM中,节点使用node来表示。HTMLDOM树中的所有节点均可通过JavaScript进行访问,所有HTML元素(节点)均......
  • JavaScript 数组结构与树结构的转换
    前言作为前端开发的同学,在与后端进行数据联调的时候,我们前端的同学处理Array数组结构的数据是最多的,list、table、card各种需要遍历的展示显示我们都会用数组来处理。当数......
  • Java编程思想5
    第十章:内部类可以将一个类得定义放在另一个类得定义内部,这就是内部类。链接到外部类在最初,内部类看起来就像是一种代码隐藏机制;其实它还有其他用途。当生成一个内部类的对......
  • Java编程思想6
    第十九章:枚举类型关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能。enum的基本特性  我们......
  • JavaScript-DOM基础【获取元素和对其属性/事件的操作】
     文档对象模型(DocumentObjectModel,简称DOM),是W3C组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口。W3C已经定义了一系列的DOM接口,通过这些DOM接口可以......