Intellij Java JNI 调用 C++

简介: 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=

 

目录
相关文章
|
8天前
|
jenkins Shell 测试技术
|
8天前
|
安全 jenkins Java
Java、Python、C++支持jenkins和SonarQube(一)
Jenkins 是一个开源的 持续集成(CI)和持续交付(CD) 工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
48 5
|
8天前
|
jenkins Java Shell
Java、Python、C++支持jenkins和SonarQube(全集)
Jenkins 是一个开源的持续集成(CI)和持续交付(CD)工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
95 1
|
8天前
|
jenkins Java 持续交付
|
8天前
|
jenkins Java 测试技术
|
3月前
|
算法 Java 数据库连接
Java 与 C++ 区别深入剖析及应用实例详解
本文深入剖析了Java和C++两种编程语言的区别,从编译与执行机制、面向对象特性、数据类型与变量、内存管理、异常处理等方面进行对比,并结合游戏开发、企业级应用开发、操作系统与嵌入式开发等实际场景分析其特点。Java以跨平台性强、自动内存管理著称,适合企业级应用;C++则因高性能和对硬件的直接访问能力,在游戏引擎和嵌入式系统中占据优势。开发者可根据项目需求选择合适语言,提升开发效率与软件质量。附面试资料链接:[点此获取](https://pan.quark.cn/s/4459235fee85)。
279 0
|
9月前
|
Java Android开发 C++
Java和C++
Java和C++
154 15
|
安全 Java API
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
247 11
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
452 11
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
387 1