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

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

一、配置环境

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

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

    1. 打开 Eclipse Marketplace

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

  3. MinGW下载安装,配置环境

    参考文章

    1. 下载,解压使用

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

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

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

二、JNI代码编写

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

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

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

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

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

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

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

    3. 编写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文件生成

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

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

四、DLL文件使用

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

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

    public class JNILib {
    
        static {
            System.loadLibrary("libMyJniLib");
        }
    
        public static native void jniPrint(String str);
    
    }
    
  2. 加载lib在运行时会找不到dll文件,则需要进行如下配置

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值