JNI基础

首先编写一段java代码

public class A {
    public native void TestFromCpp();
}

然后使用命令javac A.java -h . 生成头文件

javah A.java 

然后得到一个生成的头文件

复制代码
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_dronff_Test_A */

#ifndef _Included_com_dronff_Test_A
#define _Included_com_dronff_Test_A
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_dronff_Test_A
 * Method:    TestFromCpp
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_dronff_Test_A_TestFromCpp
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif
复制代码

然后创建一个cpp文件

#include<stdio.h>
#include<jni.h>
#include "com_dronff_Test_A.h"
JNIEXPORT void JNICALL Java_com_dronff_Test_A_TestFromCpp
  (JNIEnv *, jclass){
  printf("hello jni");
  }

使用命令 

gcc -I "C:\Program Files\Java\jdk1.8.0_202\include" -I "C:\Program Files\Java\jdk1.8.0_202\include\win32" -shared -o hello.dll C:\Users\Dronff\IdeaProjects\JNITest\src\com\dronff\Test\TestA.cpp编译文件

将编译好的文件hello.dll复制到java代码目录下

 

复制代码
package com.dronff.Test;

/**
 * @author tyf
 * 2022/7/4
 */
public class A {
    public native void TestFromCpp();
    static {
        System.load(System.getProperty("user.dir")+"\\hello.dll");
    }

    public static void main(String[] args) {
        A a = new A();
        a.TestFromCpp();
    }
}
//gcc -I "C:\Program Files\Java\jdk1.8.0_202\include" -I "C:\Program Files\Java\jdk1.8.0_202\include\win32" -shared -o hello.dll C:\Users\Dronff\IdeaProjects\JNITest\src\com\dronff\Test\TestA.cpp
复制代码

然后运行

posted @   dronff  阅读(25)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示