javah命令详解「建议收藏」

2022-11-08 19:19:55 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

概述:

最近在写c /c的一个小的项目,需要打成动态库,供java使用。就对java 调用c /c代码做了简答了解,在此做记录。jni开发第一步,就是用javah命令生成生成cc 头文件。

javah命令参数详解

cmd(默认配置jdk path) 执行javah -help 如下图:

-d 和-o 这两个参数用于设置生成的CC 头文件的指定,该两参数选项不能同时使用,-d是为中的每个有JNI方法的java类都生成一个头文件,并存放在-d指定的目录中,-o则是生成的所有JNI方法的头文件都放在-o指定的文件中。 -jin 表示用于生成JNI风格的CC 头文件,默认该参数就是开启的。 -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类:

代码语言:javascript复制
public class HelloWorld{

    static {

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

        //D:jnihhellox64Debug
    }
    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:jnihelloWorld目录 创建src目录,并创建comwei子目录。 2、D:jnihelloWorldsrccomwei创建HelloWorld.java Test.java。 HelloWorld.java

代码语言:javascript复制
package com.wei;
public class HelloWorld { 
   

    public native String getHelloString();
}

Test.java

代码语言:javascript复制
package com.wei;
public class Test{ 
   
    public native String TestJni();
}

3、在D:jniHelloWorld目录新建一个src.txt文本描述,和一个myClass空目录,打开cmd命令,并切换到D:jnihelloWorld目录,执行 javac命令

src.txt

代码语言:javascript复制
srccomweiHelloWorld.java
srccomweiTest.java

执行命令后会在myClass目录生成comwei HelloWorld.class Test.class

4、在D:jniHelloWorld目录新建一个myClass.txt有关类文本描述,打开cmd命令,并切换到D:jnihelloWorld目录,执行 javah命令 myClass.txt

代码语言:javascript复制
com.wei.HelloWorld
com.wei.Test

执行命令后会在./jni 目录生成以上两个类的头文件。

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

希望对您有所帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

0 人点赞