java使用JNI调用C++程序

前言

日常使用java开发,有时会碰到java难以解决的问题,最近做G711音频转码时,由于java缺少音视频编码相应类库,而c++在这方面就有非常完善的类库,那就需要java通过JNI调用c++的代码。这里抽出来1个简单实例,来说明使用jni的基本方法。

开发工具

java 使用 IDEA 2017
C++ 使用 Microsoft Visual Studio Professional 2019

编写java代码

新建1个java项目jni,项目结构如下:
项目结构
编写测试代码:

package com.chen.test;

public class JNIDemo {

    public native void testHelloWorld();

    public static void main(String[] args){
        System.loadLibrary("helloJNI");
        JNIDemo jniDemo = new JNIDemo();
        jniDemo.testHelloWorld();
    }
}

使用java类生成c++的头文件

java程序包的目录src执行 javah命令

E:\idea-space\MyProject\jni\src>javah -classpath . -jni com.chen.test.JNIDemo

会生成1个.c的头文件
在这里插入图片描述

编写C++代码

新建1个C++项目

  1. 文件 -> 新建 -> 项目
    在这里插入图片描述

  2. 选择动态链接库(DLL),下一步
    在这里插入图片描述

  3. 配置新项目名为helloJNI,点创建
    在这里插入图片描述

拷贝头文件

jdk安装目录下的:include下的jni.h、 include/win32下的jni_md.h,java生成的头文件com_chen_test_JNIDemo.h拷贝到C++项目空间中
在这里插入图片描述

在这里插入图片描述

添加头文件

右键头文件 --> 添加 --> 现有项
在这里插入图片描述
选中以下3个文件添加
在这里插入图片描述
修改com_chen_test_JNIDemo.h,把#include <jni.h>改成#include "jni.h"

开发C++代码

源文件 --> 添加 --> 类
在这里插入图片描述
输入类名helloJNI
在这里插入图片描述

#include "pch.h"
#include "helloJNI.h"
#include "com_chen_test_JNIDemo.h"
#include <iostream>
#include <stdio.h>

JNIEXPORT void JNICALL Java_com_chen_test_JNIDemo_testHelloWorld
(JNIEnv*, jobject) {
    printf("this is C++ !");
}

配置C++工程

右键 解决方案 --> 属性,配置为release,x64
在这里插入图片描述

生成dll文件

在工程名上右键,生成
在这里插入图片描述

1>正在生成代码
1>Previous IPDB not found, fall back to full compilation.
1>All 5 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
1>已完成代码的生成
1>helloJNI.vcxproj -> C:\Users\c2954\source\repos\helloJNI\x64\Release\helloJNI.dll
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

在工程目录下就会生成dll文件
在这里插入图片描述

把dll文件拷贝到java项目中

在这里插入图片描述

把dll添加到java的library中

File --> Project Structure… --> java项目 --> Dependencies --> 点 --> JARs or Directories --> 选择 helloJNI.dll
在这里插入图片描述

运行java程序JNIDemo

在这里插入图片描述
至此,java调用c++代码示例完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章