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++代碼示例完成。

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