javah命令詳解

概述:

最近在寫c++/c的一個小的項目,需要打成動態庫,供java使用。就對java 調用c++/c代碼做了簡答瞭解,在此做記錄。jni開發第一步,就是用javah命令生成生成c\c++頭文件。

javah命令參數詳解

cmd(默認配置jdk path) 執行javah -help 如下圖:
這裏寫圖片描述

-d 和-o
這兩個參數用於設置生成的C\C++頭文件的指定,該兩參數選項不能同時使用,-d是爲中的每個有JNI方法的java類都生成一個頭文件,並存放在-d指定的目錄中,-o則是生成的所有JNI方法的頭文件都放在-o指定的文件中。
-jin
表示用於生成JNI風格的C\C++頭文件,默認該參數就是開啓的。
-classpath
 使用-classpath後JDK將不再使用CLASSPATH中的類搜索路徑,如果-classpath和CLASSPATH都沒有設置,則JDK使用當前路徑(.)作爲類搜索路徑。
  推薦使用-classpath來定義JDK要搜索的類路徑,而不要使用環境變量CLASSPATH的搜索路徑,以減少多個項目同時使用CLASSPATH時存在的潛在衝突。例如應用1要使用a1.0.jar中的類G,應用2要使用 a2.0.jar中的類G,a2.0.jar是a1.0.jar的升級包,當a1.0.jar,a2.0.jar都在CLASSPATH中,JDK搜索到第一個包中的類G時就停止搜索,如果應用1應用2的虛擬機都從CLASSPATH中搜索,就會有一個應用得不到正確版本的類G。
-verbose
該參數,將顯示javah命令搜索和裝置類文件的詳細過程。

例子1

新建一個含有native方法的java類:

public class HelloWorld{

    static {

        System.load("D://jni//h//hello//x64//Debug//hello.dll");//載入dll  Connector.dll

        //D:\jni\h\hello\x64\Debug
    }
    public static void main(String args []){

        HelloWorld helloWord = new HelloWorld();
        helloWord.sayHello("nihao");

    }
    public  native void sayHello(String name);

}

切換到HelloWorld.java所在目錄,執行javac HelloWorld.java命令 在本目錄會生成HelloWorld.class文件
執行javah -o .\myjni -classpath .\ -jni HelloWorld** 會在當前目錄生成名字爲myjni.h頭文件
執行javah -d .\jni -classpath .\ -jni HelloWorld 會在當前目錄新建一個jni目錄,並在jni目錄生成一個HelloWorld.h頭文件

這裏寫圖片描述
注意一定是在HelloWorld.java所在目錄執行以上命令

這裏寫圖片描述
例子2:
1、D:\jni\helloWorld目錄 創建src目錄,並創建com\wei子目錄。
2、D:\jni\helloWorld\src\com\wei創建HelloWorld.java Test.java。
HelloWorld.java

package com.wei;
public class HelloWorld {

    public native String getHelloString();
}

Test.java

package com.wei;
public class Test{
    public native String TestJni();
}

3、在D:\jni\HelloWorld目錄新建一個src.txt文本描述,和一個myClass空目錄,打開cmd命令,並切換到D:\jni\helloWorld目錄,執行 javac命令
這裏寫圖片描述
src.txt

src\com\wei\HelloWorld.java
src\com\wei\Test.java

執行命令後會在myClass目錄生成com\wei\ HelloWorld.class Test.class
這裏寫圖片描述
4、在D:\jni\HelloWorld目錄新建一個myClass.txt有關類文本描述,打開cmd命令,並切換到D:\jni\helloWorld目錄,執行 javah命令
myClass.txt

com.wei.HelloWorld
com.wei.Test

這裏寫圖片描述
執行命令後會在./jni 目錄生成以上兩個類的頭文件。
這裏寫圖片描述

到此我相信大家再也不會爲生成jni頭文件而不知所措了,下一篇我會整理一下,在android studio上生成頭文件的方法。

希望對您有所幫助!

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