由C++的dll生成JNI的dll实例--详细步骤(使用vs2015生成dll,使用命令行生成)

本文详述了如何将C++的dll文件转换为Java Native Interface (JNI)的dll文件,包括搭建开发环境、创建Java类、生成并实现C/C++头文件、配置及编译工程等步骤。

整体流程:

初始.java文件 —— 生成.class文件 —— 生成.h头文件 —— 完善成.cpp文件 —— 生成JNI的dll文件 —— 完善初始java文件

目的:

现有C++版本的dll,需要转化成JNI的dll。此文中C++的dll:“Cpplus.dll”,目标JNI的dll:“JNI.dll”

首先准备的有:

1. 安装windows下的jdk,并配置;

2. 安装mingw_64。mingw_64位最新版下载地址 , mingw_32位最新版下载地址  .(该软件的作用是在windows系统使用gcc和g++命令,对c文件和c++文件进行编译,生成.o文件, 进而生成.dll文件。64位的只能生成64位的dll文件。若要生成32位的dll文件,请下载32位的mingw.)

2. 第二步或者利用VS编译器也可以。

步骤:

1.我电脑上没有eclipse,所以手动新建一个文件夹Proj,里面新建com\video\ocr三级文件夹,在ocr文件夹下新建一个java文件JavaSDK_Video.java,如图:

1.编写带有native声明方法的java类 (JavaSDK_Video.java)

public class JavaSDK_Video{
    // 声明本地方法 
    public native short StartEx(String CorePath);
    public native short LoadImage(String szImagePath);
    static {
        // 加载DLL文件,先随便写
        System.loadLibrary("aaa");
    }
    public static void main(String[] args) {
    }
}


2.使用javac命令编译java文件(JavaSDK_Video.class),要注意javac命令与com文件夹同级

javac com\video\ocr\JavaSDK_Video.java

3.使用javah生成c/c++原生函数的头文件 (JavaSDK_Video.h),javah与com包同级

javah com.video.ocr.JavaSDK_Video

// JavaSDK_Video.h原文如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_video_ocr_JavaSDK_Video */

#ifndef _Included_com_video_ocr_JavaSDK_Video
#define _Included_com_video_ocr_JavaSDK_Video
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_video_ocr_JavaSDK_Video
 * Method:    StartEx
 * Signature: (Ljava/lang/String;)S
 */
JNIEXPORT jshort JNICALL Java_com_video_ocr_JavaSDK_1Video_StartEx
  (JNIEnv *, jobject, jstring);

/*
 * Class:     com_video_ocr_JavaSDK_Video
 * Method:    LoadImage
 * Signature: (Ljava/lang/String;)S
 */
JNIEXPORT jshort JNICALL Java_com_video_ocr_JavaSDK_1Video_LoadImage
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

注:本文的Java类用Notepad++编写。

4.复制刚才生成的.h文件,使用C/C++实现头文件中声明的函数(JavaSDK_Video.cpp)

// JavaSDK_Video.cpp原文如下:

#include "jni_md.h"
#include "jni.h"
#include <stdio.h>
#include "stdlib.h"
//···  记得包含C++版dll所需的头文件
#include "com_video_ocr_JavaSDK_Video.h"


JNIEXPORT jshort JNICALL Java_com_video_ocr_JavaSDK_1Video_XTH_1Start
(JNIEnv *env, jobject obj)
{	
	return X_Start();
}

JNIEXPORT jshort JNICALL Java_com_video_ocr_JavaSDK_1Video_XTH_1LoadImage
(JNIEnv *env, jobject obj, jstring lpszImageFile)
{
	···
    //jstringTostring的转换
	return X_LoadImage(pImgPath);
}


5.使用vs2015配置Jni工程,主要步骤在于依赖库的地址要输入正确,如图

6.编译此工程,生成Jni版dll(JNI.dll)

 

7.最后就可以完善刚才的初始java文件,修改添加正确的JNI版dll,完善main函数等。 

 其中上述是在VS编译器生成的dll,如果不想装VS,可以安装Mingw后通过命令行g++等命令生成dll,如下:

下载安装mingw_64位, 并将其安装目录配置到系统环境变量 
安装完后将{minw安装目录}\mingw64\bin放到环境变量的path即可。

生成.o文件

执行命令:

g++ -c -I"%JAVA_HOME%\include" - I"%JAVA_HOME%\include\win32" JavaSDK_Video.cpp

执行完上述命令会生成JavaSDK_Video.o文件。

生成dll文件

执行命令:

g++ -Wl,--add-stdcall-alias -shared -o JNI.dll JavaSDK_Video.o

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值