大家好,又见面了,我是你们的朋友全栈君。
概述:
最近在写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上生成头文件的方法。
希望对您有所帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。