小记Eclipse环境下JNI编译DLL库(图文笔记)

xiaoxiao2021-02-28  24

此文比较简单,主要记录主要步骤而已。 起因:公司需要将原先客户端的JNI逻辑搬到java上,给测试同事搞自动化测试环境。原来在Android上直接使用.so文件,现在需要生成.dll文件,由于没搞过C/C++,所以,又进坑了!

一、配置环境

第一步,下载Eclipse,安装;下载JDK,安装(不是重点,略过)

第二步,安装cdt插件(在Eclipse开发C/C++,生成dll文件使用)

打开 Eclipse Marketplace

搜索CDT安装,此处图示,我已经安装,在你们电脑上应该是install,点击安装下一步就可以(我公司网非常差,所以安装了3次才成功!!!!)

MinGW下载安装,配置环境

参考文章

下载,解压使用

下载官网:http://www.mingw.org/,由于是外国的网站可能下载的时候有些慢,这里提供网盘分享:http://pan.baidu.com/s/1cIIG7k (该版本适用于windows 32/64系统)

配置环境变量(win10是键值对形式,比较直观)

打开环境变量中的path,在最后面加上;D:\mingw\bin;(目录参考)即可

二、JNI代码编写

第一步,创建一个 java类,包含native接口

package com.rytong.test; public class JNILib { // static { // System.loadLibrary("libMyJniLib"); // } public static native void jniPrint(String str); }

使用javah命令

有两个注意要点:1. java7及以上版本,执行javah目录是src目录;2. java7以下版本,执行javah目录为bin目录(有class文件的目录);3. javah 后面的命令格式为:D:\eclipse\work\HelloWorld\src>javah com.rytong.test.JNILib,类名去掉.java后缀,前面补全包名即可。

执行javah命令生成对应的.h文件执行命令不报错则刷新工程,即可在src目录下找到.h文件

创建C++项目

创建一个C++项目,选择shared libary形式创建

将之前生成的.h投文件copy到src的子包下,补全形参

JNIEXPORT void JNICALL Java_com_rytong_test_JNILib_jniPrint (JNIEnv *env, jclass jthis, jstring str);

编写cpp文件(JNI中的语法,不是重点,忽略)

#include "com_rytong_test_JNILib.h" JNIEXPORT void JNICALL Java_com_rytong_test_JNILib_jniPrint (JNIEnv *env, jclass jthis, jstring str){ jboolean iscopy =false; const char *charData = env->GetStringUTFChars(str, &iscopy); printf("The data from java is:%s",charData); env->ReleaseStringUTFChars(str, charData); }

三、DLL文件生成

项目右键,选择properties,找到如下选项,在linker flags处填入:-Wl,–add-stdcall-alias

编译dll文件:选中项目–> build–>release,会生成一个release文件夹,即可得到编译好的dll文件。

四、DLL文件使用

在调用的过程中有点小插曲,之前的一个项目代码不知道怎么回事,不报错就是执行不成功,没有深究,新换个工程就ok了。

把dll文件放到lib文件夹中(文件存放位置随意,后面步骤能找到即可),在原先的包含native接口的类中加载lib(在其他类中加载也可以)

public class JNILib { static { System.loadLibrary("libMyJniLib"); } public static native void jniPrint(String str); }

加载lib在运行时会找不到dll文件,则需要进行如下配置

调用jni的方法,执行,直接上运行结果图

转载请注明原文地址: https://www.6miu.com/read-1700363.html

最新回复(0)