Java JNI調用c語言的dll測試


       最近復習C語言和java語言(10年沒用了,溫習一下),用JNI調用C語言的dll測試,以前沒做過,在網上找了很多,總結如下:

      環境:windows 10(64位) + JDK(32位,版本1.7.0_79) + MinGW(32位),注意JDK和MinGW要么都是32位,要么都是64位,不能一個是32位另一個是64位。

      java和MinGW的環境配置在網上查找。

 

一、【不用eclipse,用記事本手工編輯 .java和 .c 程序】

         1、hello.java代碼如下:            

      

         2、編譯Hello.java程序命令:javac Hello.java   --生成Hello.class文件。

         3、生成Hello.h文件命令:javah Hello    --生成Hello.h頭文件,該頭文件在C語言編碼中要用到,所以將Hello.h存放到后綴為 .c 文件代碼相同的目錄。

               

         4、arr.c文件內容如下:

              

          5、C編譯環境准備:需要將JDK對應的 jni_md.h 和 jni.h 兩個文件拷貝到MinGW的安裝目錄的include目錄下。      

                jni_md.h在 %JAVA_HOME%\ include\win32目錄下; jni.h在%JAVA_HOME%\ include目錄下。

                如果不想拷貝,則在下面的6步命令末尾需要添加如下內容:

                  -I"C:\Program Files (x86)\Java\jdk1.7.0_79\include" -I"C:\Program Files (x86)\Java\jdk1.7.0_79\include\win32"

                   其中,JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_79. 根據自己的JAVA_HOME路徑修改。

                   添加雙引號是因為gcc命令行解釋不了”Program Files (x86)“中的空格字符。

           6、編譯生成 hello.dll 動態庫文件命令:

                   gcc arr.c -shared -o hello.dll -Wl,--kill-at

                命令解釋:

                             -shared  -o hello.dll      /* 指定編譯生成的目標文件 hello.dll是動態庫文件 */

                             -Wl     /* 告訴編譯器將后面的參數傳遞給鏈接器 */

                             -Wl,--kill-at  /*告訴鏈接器去掉函數名稱后綴的@符號 --該問題涉及比較深入的東西,暫時不管,只管按命令執行,生成 .dll 文件,實現測試目的。*/

    7、檢查測試目錄 E:\test下的文件如下 :

      

   8、執行 java Hello,成功!


 二、【使用Eclipse編輯】

          使用 eclipse 編輯的區別主要在 JAVA 源程序常常裝在 package 中,所以需要特別處理一下:

   1、編輯完成 .java 代碼后,就用eclipse 編譯成.class文件。

         2、使用javah -o E:\test\com_test_HelloWorld.h  -classpath  $ProjectPath\build\classes  com.test.HelloWorld 

              $ProjectPath :該路徑指eclipse中生成HelloWorld.java項目的路徑。

     注意:com.test.HelloWorld這個名稱一定要按自己的 package 順序寫完。

         3、使用命令行生成JNI格式的C語言頭文件.h文件:

               gcc arr.c -shared -o 希望存放的路徑\hello.dll -Wl,--kill-at -I"JDK安裝路徑\include" -I"JDK安裝路徑\include\win32"

               希望存放的路徑:指生成的hello.dll文件存放路徑。

                JDK安裝路徑: 指自己的JAVA_HOME目錄路徑。

         4、在 eclipse的項目配置中(右鍵項目名稱->Build Path -> Configure Build Path,然后選擇 Java Build Path ,在右邊的Source 頁展開當前項目;

              然后,選中Native Library Location,點擊“Edit” ,再選擇“Workspace”,將第3步生成的 .dll  文件目錄添加到項目中。

        5、運行HelloWorld,成功!

 

三、JNI測試常見錯誤 java.lang.UnsatisfiedLinkError:

          參考:http://blog.csdn.net/binyao02123202/article/details/18075747

                  http://blog.csdn.net/niuxinlong/article/details/4176612

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM