java使用JNI调用C++程序
- 前言
- 开发工具
- 编写java代码
- 使用java类生成c++的头文件
- 编写C++代码
- 新建1个C++项目
- 拷贝头文件
- 添加头文件
- 开发C++代码
- 配置C++工程
- 生成dll文件
- 把dll文件拷贝到java项目中
- 把dll添加到java的library中
- 运行java程序JNIDemo
前言
日常使用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++项目
- 文件 -> 新建 -> 项目
- 选择动态链接库(DLL),下一步
- 配置新项目名为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++代码示例完成。