javah命令详解「建议收藏」

javah命令详解「建议收藏」概述:最近在写c++/c的一个小的项目,需要打成动态库,供java使用。就对java调用c++/c代码做了简答了解,在此做记录。jni开发第一步,就是用javah命令生成生成c\c++头文件。javah命令参数详解cmd(默认配置jdkpath)执行javah-help如下图:-d和-o这两个参数用于设置生成的C\C++头文件的指定,该两参数选项不能同时使…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

概述:

最近在写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上生成头文件的方法。

希望对您有所帮助!

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189698.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows 7 旗舰版下,安装vs2010旗舰版终于成功!

    windows 7 旗舰版下,安装vs2010旗舰版终于成功!折腾了好久好久郁闷了好久着急了好久终于把VS2010旗舰版安装成功了!情况:1.我的本本是tinkpad,购买的时候预装了window7homebasic在网上找了一下序列号升级到window7旗舰版本。2.之前我一直用windowsxp对window7相当的陌生!直接跳级可不是简单的事情啊!!(因为我不熟徐windown7安装失败了好几次!)3.在我安装vs20…

    2022年7月20日
    22
  • python中多个if语句用法_python中if函数多个条件怎么用

    python中多个if语句用法_python中if函数多个条件怎么用python的if语句为条件判断语句,习惯与else搭配使用。if结构允许程序做出选择,并根据不同的情况执行不同的操作if的用法1.只有if进行判断desserts=[‘icecream’,’chocolate’,’applecrisp’,’cookies’]favorite_dessert=’applecrisp’hate_dessert=’chocolate’fo…

    2022年9月26日
    0
  • MQTT服务器搭建以及构建服务端和客户端

    MQTT服务器搭建以及构建服务端和客户端MQTT介绍MQTT,是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/预订协议,可以连接大量的远程传感器和控制设备:轻量级的消息订阅和发布(publish/subscribe)协议建立在TCP/IP协议之上IoT,internetofthings,物联网,MQTT在这方面应用较多。MQTT协议是针对如下情况设计的:M2M(MachinetoMachi…

    2022年4月30日
    120
  • markdown文本居中_markdown居中语法

    markdown文本居中_markdown居中语法示例表格序号偏移说明10表格说明22表格说明34表格说明实现的代码是下面这样的。<!–让表格居中显示的风格–><style>.center{width:auto;display:table;margin-left:auto;margin-right:auto;}</style><palign=”center”><fontfac..

    2022年9月19日
    0
  • layui弹出层提交表单![通俗易懂]

    layui弹出层提交表单![通俗易懂]本文章使用layui框架,提交表单,如果使用其他的框架请右上角!首先设置弹出层如下图:layer.open({ type:2, title:"信息編輯", area:[‘45%’,’35%’], shade:0, sha…

    2022年5月6日
    587
  • c++中的排序函数Sort的具体用法(vb中sort函数怎么用)

    最近在刷ACM经常用到排序,以前老是写冒泡,可把冒泡带到OJ里后发现经常超时,所以本想用快排,可是很多学长推荐用sort函数,因为自己写的快排写不好真的没有sort快,所以毅然决然选择sort函数用法1、sort函数可以三个参数也可以两个参数,必须的头文件#include和usingnamespacestd;2、它使用的排序方法是类似于快排的方法,时间复

    2022年4月14日
    75

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号