轉自https://blog.csdn.net/yjhdxflqm/article/details/50503551
jni是java和C、C++通信的橋梁。
java適合寫上層的應用,C、C++適合寫底層的應用。因為C、C++就是跟底層打交道的。
當然這里並不討論那么多,只是我要記住這一點,我所以做的工作就是如何使用jni,把留在.java中的本地的接口,讓C,C++代碼實現,然后供java接口使用。是的,我想做的工作就是這樣。
一、在命令提示符下,用javah命令 使帶有native接口的java源文件生成對應的.h文件,供C++語言實現。
我想補充內容:java源文件就是用java語言編寫的以.java為后綴名的代碼文件。
類文件是經過javac編譯過后的字節碼文件。
類文件通過jvm的解釋翻譯為本機能夠識別的機器語言。
源代碼是給程序員看的,類文件是給jvm看的,機器語言是給計算機的cpu用的。
簡單的執行:

用javah命令生成本地接口類的頭文件;

我想說的是:javah -jni Person 和javah Person似乎是一樣的,但是在實際當中最好加上“-jni”這個參數
然后就是把Person.h這個頭文件添加到vs2013下去編譯成dll庫文件。
這里也截個圖,因為有時就連這簡單的幾步也走不下去,真的很累的。





到這里就可以引入頭文件了。把頭文件拷貝到工程的目錄,不然你通過工程添加文件向導,還的重新包含該文件的路徑,那樣又麻煩了。


緊接着就是編譯出DLL文件的過程。


然后把這個dll文件拷貝到桌面,因為Person.java文件在桌面呢,我這只是想 在命令提示符下簡單實驗而已。
修改Person.java源文件,加載dll文件,然后再次編譯執行。


到這里為止,算是通過win7下的命令提示符,編譯java的過程,以及C++語言實現java本地接口,java使用該接口的過程。
雖然這個簡單的操作沒有意義,其實我是想引入下一個話題,那就是自己在命令提示符符下面,使用javah命令,使java 原生文件生成.h文件是非常的麻煩的。能不能通過eclipse來簡單配置一下,讓我們自動生成.h文件更加的方便一些呢?答案肯定了!下面就繼續截圖。



由於我的建好過了,我就不再重復建了,我寫這個文檔的時候,實際是為了加深自己的記憶,但是真的害怕有人看到我的總結,看不懂會罵我,也為了幫助像我一樣需要幫助的人,當遇到困難的時候,每有人幫助和理解,是真的很痛苦,有些東西,自己干琢磨,花費了很長的時間,抹殺了很大的信心,哎!

Name:Java_JavaH
Location:D:\Program Files\Java\jdk1.7.0_67\bin\javah.exe
Working Directory:${project_loc}${system_property:file.separator}\src
Arguments:-classpath ${project_loc}${system_property:file.separator}\src -d ${project_loc}${system_property:file.separator}\jni -jni ${java_type_name} 根據實際環境修改。




到這里eclipse下native接口文件自動生成.h文件的配置完成。
效果就是


到這里自動的生成native所對應的.h文件算是完成了。但是還有的問題就是引入編譯后的DLL的問題,網上的說法不一,但是我的實驗是:把Dll放到C:\Windows\System32目錄下是可以引入的,但是配置放到環境變量path下是不行的,有的人說的很多,我都懵了。
但是總是放到C:\Windows\System32這么目錄下也不行的,因為這是在windows下,如過在Max os下呢,所以,引用C++編譯出來的dll文件,java文件在編譯的時候,加載這個dll文件,如何讓它識別呢?
看截圖吧!

生成dll的文件,拷貝到一個項目下的目錄中,比如我把他拷貝到jni目錄。
然后添加引用。。。注意了



這篇文檔記錄的是java調用C++的過程!以后的內容會慢慢補充!
