小記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的方法,執行,直接上運行結果圖

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